- 问题描述
将两个升序链表合并为一个新的升序链表并返回 - 解决思路
①创建一个新链表
②设置两个指针 (cur1 , cur2), 使它们分别指向两个链表的头结点.
用 cur1, cur2 遍历两个链表的同时, 比较两个链表的每一个结点元素的大小
将较小的元素尾插到新链表中, 同时将此链表结点往后走一步.
不断比较链表结点的值,不断更新链表 cur1 , cur2的位置, 直到 cur1, cur2 中任意一个走到了链表的尾部.
③将 cur1, cur2 中没走到链表尾部,所剩余的结点直接链接到新链表的尾部.(因为它是有序链表, 如果一个走到了链表尾部, 另一个未走到链表末尾, 说明已插入到新链表中的结点的值都比剩余部分结点的值小) - 源代码
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public class MergeTwoLists {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode newHead = new ListNode(0);
ListNode newTail = newHead;
ListNode cur1 = l1;
ListNode cur2 = l2;
while (cur1 != null && cur2 != null) {
if (cur1.val < cur2.val) {
newTail.next = new ListNode(cur1.val);
cur1 = cur1.next;
} else {
newTail.next = new ListNode(cur2.val);
cur2 = cur2.next;
}
newTail = newTail.next;
}
if (cur1 != null) {
newTail.next = cur1;
} else {
newTail.next = cur2;
}
return newHead.next;
}
}