合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
数据范围
链表长度 [0,500]。
样例
输入:1->3->5 , 2->4->5
输出:1->2->3->4->5->5
Java代码如下:
解法1:
public ListNode merge(ListNode l1, ListNode l2) { if(l1==null||l2==null)return l1==null?l2:l1;//判断是否为空 ListNode head=null; ListNode n1=l1; ListNode n2=l2; //将值最小的作为头结点 if(n1.val<=n2.val) { head=n1; n1=n1.next; } else { head=n2; n2=n2.next; } ListNode p=head;//尾指针,指向最后一个结点 while(n1!=null&&n2!=null) { if(n1.val<=n2.val) { p.next=n1; n1=n1.next; p=p.next; }else { p.next=n2; n2=n2.next; p=p.next; } } //将剩余结点加入链表 while(n1!=null) { p.next=n1; n1=n1.next; p=p.next; } while(n2!=null) { p.next=n2; n2=n2.next; p=p.next; } return head;
解法2:递归思想
public ListNode dfMerge(ListNode l1, ListNode l2) { if(l1==null||l2==null)return l1==null?l2:l1;//判断是否为空 ListNode res=dfMergeFun(l1, l2); return res; } public ListNode dfMergeFun(ListNode l1, ListNode l2) { if(l1==null||l2==null)return l1==null?l2:l1;//判断是否为空 ListNode temp=null; if(l1.val<=l2.val) { temp=l1; temp.next=dfMergeFun(l1.next, l2); }else { temp=l2; temp.next=dfMergeFun(l1, l2.next); } return temp;
Do more and talk less!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2023-01-06 Spring之AOP