【LeetCode】#21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
方法一:遍历判断
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode l3=new ListNode(0); ListNode tmp = l3; while(l1!=null&&l2!=null){ if(l1.val<=l2.val){ tmp.next = l1; tmp = tmp.next; l1=l1.next; }else{ tmp.next = l2; tmp = tmp.next; l2=l2.next; } } if(l2!=null){ tmp.next=l2; } if(l1!=null){ tmp.next=l1; } return l3.next; } }
方法二:递归(最佳)
class Solution { public 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; } } }
知识点:
实现递归需要考虑三要素:
1、返回结果。
2、执行条件。
3、终结条件。
总结:
链表题得注意指针指向问题,保留一个头节点,接着用指针去补充链表节点。
若是重复循环的算法,或许可以使用递归简化问题。
本文作者:Canyooo
本文链接:https://www.cnblogs.com/canyooo/p/15255607.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步