将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 :
1 2
| 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
|
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
本题想法比较简单,就是创建一个新链表,然后遍历两个链表结点,哪个结点值小就往新链表后面接。
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode temp = dummy; while (l1 != null && l2 != null) { if (l1.val > l2.val) { temp.next = l2;
l2 = l2.next; } else { temp.next = l1;
l1 = l1.next; } temp = temp.next; }
temp.next = l1 == null ? l2 : l1; return dummy.next; } }
|
本题还有一种递归的思路,这里给出了详细解释https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/yi-kan-jiu-hui-yi-xie-jiu-fei-xiang-jie-di-gui-by-/
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
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; } } }
|