题目
出处:LeetCode 算法第21题
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
1 | 输入:1->2->4, 1->3->4 |
思路
遍历解法
- 先判断链表为空的情况
- 创建一个新链表,并在其前面加上一个哑节点,用于简化各种极端操作
- 创建一个指针,指向这个哑节点
- 循环判断 两个链表头节点值的大小 ,谁的值小将谁传入新链表
- 如果两个链表不一样长,剩余的部分也要加在新链表的后面
递归算法
- 递归算法写出来看着十分简洁,就是如果太多层的调用的话,调用太多栈会性能下降
- 谁的头节点小,就将该头节点作为最终链表的头节点
- 再一层层递归下去,反复调用自身函数,成功将链表合并
- 需要注意的是:如果两链表长度不想等,一定要在后面加上长链表剩余的部分
代码
遍历
1 | public class ListNode { |
1 | public ListNode mergeTwoLists(ListNode l1, ListNode l2) { |
递归
1 | public ListNode mergeTwoLists(ListNode l1, ListNode l2) { |