leetcode 21 Merge Two Sorted Lists (合併兩個有序連結串列)
阿新 • • 發佈:2019-01-05
題目要求
合併兩個已排序的連結串列並將其作為新列表返回。 新連結串列應該通過拼接前兩個連結串列的節點來完成。
例子
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
解題思路
“雙指標法”
通過兩個指標,當兩個連結串列都存在的時候,分別遍歷兩個連結串列,每次比較兩個元素的數值,即可。若有一個連結串列為空(或者遍歷完畢)的時候,那麼直接將另一個連結串列中的元素新增進合併連結串列。
在具體的實現過程中,我們通過設定一個傀儡節點(連結串列中常用的技巧),dummy
主要程式碼c++
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode dummy(0); // 設定傀儡節點
ListNode *tail = &dummy; // 取地址指向傀儡節點,這兩步是常規寫法
while (l1 && l2) { //當l1,l2都還存在時
if (l1->val < l2->val) {
tail->next = l1; // 因為l1的值更小,所以下一節點指向l1
l1 = l1->next;
} else {
tail->next = l2; // 同理,只想l2
l2 = l2->next;
}
tail = tail->next; // 一次比較之後,繼續移動
}
tail->next = l1 ? l1 : l2; // 若l1,l2 一種為空(或遍歷完)的時候
return dummy.next;
}
};