前言:
现时各位老铁们对“c语言合并两个有序链表”大约比较重视,姐妹们都想要学习一些“c语言合并两个有序链表”的相关知识。那么小编同时在网上收集了一些有关“c语言合并两个有序链表””的相关文章,希望小伙伴们能喜欢,你们快快来学习一下吧!#头条创作挑战赛#
❝
❤️作者简介:大家好,我是小虚竹。Java领域优质创作者,CSDN博客专家,华为云享专家,掘金年度人气作者,阿里云专家博主,51CTO专家博主
❤️技术活,该赏
❤️点赞 收藏 ⭐再看,养成习惯
❞
零、前言
今天是学习 「JAVA语言」 打卡的第13天,我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真的自己实现一遍,那意味着 「JAVA语言」 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
一、题目描述
原题地址--》传送门 题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
二、解题思路如果把问题拆解成子问题,子问题具有跟父问题一样的结构,可以考虑用自上而下的递归对两个有序链接l1和l2进行非空判断,有空的话,返回另一个非空链接
三、代码详解
ListNode 链表对象
package com.xiaoxuzhu;/** * Description: 链表对象 * * @author zenghw * @version 1.0 * * <pre> * 修改记录: * 修改后版本 修改人 修改日期 修改内容 * 2022/8/21.1 zenghw 2022/8/21 Create * </pre> * @date 2022/8/21 */public class ListNode { int val; ListNode next; public ListNode() { super(); } public ListNode(int val) { this.val = val; this.next = null; } public ListNode(int val, ListNode next) { this.val = val; this.next = next; }}
Solution类
package com.xiaoxuzhu;/** * Description: 合并两个有序链表(考察递归) * * @author zenghw * @version 1.0 * * <pre> * 修改记录: * 修改后版本 修改人 修改日期 修改内容 * 2022/8/21.1 zenghw 2022/8/21 Create * </pre> * @date 2022/8/21 */class Solution { public static void main(String[] args) { //l1 = [1,2,4], l2 = [1,3,4] //初始化数据 int[] l1 = new int[]{1,2,4}; int[] l2 = new int[]{1,3,4}; //创建首节点,节点的val是1. ListNode listnode1 = new ListNode(1); //创建首节点,节点的val是1. ListNode listnode2 = new ListNode(1); initListNode(listnode1,l1); initListNode(listnode2,l2); ListNode listnode3 = mergeTwoLists(listnode1,listnode2); print(listnode3); } private static void print(ListNode listnode){ //创建链表节点 while(listnode!=null){ System.out.println("节点:"+listnode.val); listnode=listnode.next; } } /** * 创建链表 * * @param listnode 链表对象 * @param arr 初始化数组数据 *@return void **/ public static void initListNode(ListNode listnode,int[] arr){ //声明一个变量用来在移动过程中指向当前节点 ListNode nextNode; //指向首节点,这样两个结点的指针指向同一个结点 nextNode=listnode; //创建链表 for (int i = 1; i < arr.length; i++) { //把新节点连起来 nextNode.next= new ListNode(arr[i]); //当前节点往后移动 nextNode=nextNode.next; } } /** * 合并链表 * * @param l1 要合并的链表1 * @param l2 要合并的链表2 *@return com.xiaoxuzhu.ListNode **/ public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } else if (l2 == null) { return l1; } else if (l1.val < l2.val) { l1.next = mergeTwoLists(l1.next, l2); return l1; } else { l2.next = mergeTwoLists(l1, l2.next); return l2; } }}
我是虚竹哥,我们下一题见~
标签: #c语言合并两个有序链表