劍指 Offer 25. 合併兩個排序的連結串列——最快的解法
阿新 • • 發佈:2020-12-21
題目描述
輸入兩個遞增排序的連結串列,合併這兩個連結串列並使新連結串列中的節點仍然是遞增排序的。
示例1
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
限制
0 <= 連結串列長度 <= 1000
解法
思路
- 建立一個假的頭結點和當前結點curr指向假頭結點
- 同時遍歷兩條連結串列,將較小的結點新增到當前結點的後面
- 有一條連結串列遍歷完後,將另一條連結串列剩餘的結點新增到curr結點後面,返回頭結點的next
程式碼
/* 合併兩個連結串列 */
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 安排一個頭結點
ListNode preHead = new ListNode(0);
// curr表示當前結點
ListNode curr = preHead, p1 = l1, p2 = l2;
while (p1 != null && p2 != null){
if(p1.val <= p2.val){
curr.next = p1;
p1 = p1.next;
} else {
curr.next = p2;
p2 = p2.next;
}
curr = curr.next;
}
// 較長的連結串列剩餘部分得繼續跟在後面
curr.next = p1 == null ? p2 : p1;
return preHead.next;
}