diff --git a/链表/6. 合并两个有序链表.md b/链表/6. 合并两个有序链表.md new file mode 100644 index 0000000..52ec6c6 --- /dev/null +++ b/链表/6. 合并两个有序链表.md @@ -0,0 +1,75 @@ +# 合并两个有序链表 + +## 题目 + +将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 + + + +示例 1: + + +输入:l1 = [1,2,4], l2 = [1,3,4] +输出:[1,1,2,3,4,4] +示例 2: + +输入:l1 = [], l2 = [] +输出:[] +示例 3: + +输入:l1 = [], l2 = [0] +输出:[0] + + +提示: + +两个链表的节点数目范围是 [0, 50] +-100 <= Node.val <= 100 +l1 和 l2 均按 非递减顺序 排列 + + +## 思路 + +- 比较后尾插法 + +## 代码 + +```java +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode list1, ListNode list2) { + // Init: DummyHead, cur + ListNode dummyHead = new ListNode(-1); + ListNode cur = dummyHead; + // Traverse: Compare + while (list1 != null && list2 != null) { + // val1 = list1.val; + // val2 = list2.val; + ListNode tmp = null; + if (list1.val > list2.val) { + tmp = list2; + list2 = list2.next; + } else { + tmp = list1; + list1 = list1.next; + } + cur.next = tmp; + cur = cur.next; + } + + cur.next = list1 == null ? list2 : list1; + + return dummyHead.next; + + } +} +```