1. 程式人生 > >leetcode 21 Merge Two Sorted Lists (合併兩個有序連結串列)

leetcode 21 Merge Two Sorted Lists (合併兩個有序連結串列)

題目要求

合併兩個已排序的連結串列並將其作為新列表返回。 新連結串列應該通過拼接前兩個連結串列的節點來完成。

例子

Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4

解題思路

“雙指標法”
通過兩個指標,當兩個連結串列都存在的時候,分別遍歷兩個連結串列,每次比較兩個元素的數值,即可。若有一個連結串列為空(或者遍歷完畢)的時候,那麼直接將另一個連結串列中的元素新增進合併連結串列。

在具體的實現過程中,我們通過設定一個傀儡節點(連結串列中常用的技巧),dummy

來進行操作,其作用在於讓合成的新連結串列有一個著手點。這個節點的值可以隨意,我們最終返回的,實際上是 dummy->next;

主要程式碼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; } };

原題連結 :https://leetcode.com/problems/merge-two-sorted-lists/