將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
思路:我們可以用迭代的方法來實現上述演算法。我們假設 l1 元素嚴格比 l2元素少,我們可以將 l2 中的元素逐一插入 l1 中正確的位置。
演算法:首先,我們設定乙個哨兵節點 "prehead" ,這可以在最後讓我們比較容易地返回合併後的鍊錶。我們維護乙個 prev 指標,我們需要做的是調整它的 next 指標。然後,我們重複以下過程,直到 l1 或者 l2 指向了 null :如果 l1 當前位置的值小於等於 l2 ,我們就把 l1 的值接在 prev 節點的後面同時將 l1 指標往後移乙個。否則,我們對 l2 做同樣的操作。不管我們將哪乙個元素接在了後面,我們都把 prev 向後移乙個元素。
在迴圈終止的時候, l1 和 l2 至多有乙個是非空的。由於輸入的兩個鍊錶都是有序的,所以不管哪個鍊錶是非空的,它包含的所有元素都比前面已經合併鍊錶中的所有元素都要大。這意味著我們只需要簡單地將非空鍊錶接在合併鍊錶的後面,並返回合併鍊錶。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
else
//將 pnode 往後移動
pnode = pnode->next;
}//判斷 pnode-> next是否為空
//如果 l1 為空,則返回 l2
//如果 l2 為空,則返回 l1
pnode->next = l1 == nullptr? l2 : l1;
//宣告乙個臨時變數
listnode* temp = prehead->next;
delete prehead;
//返回最終的結果
return temp;}};
leetcode合併兩個有序列表
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。例如 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 class solution def mergetwolists self,l1 listnode,l2 listnode listnode ...
Go實現合併兩個有序列表(leetcode 21)
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 如下 definition for singly linked list.type listnode struct func mergetwo...
LeetCode 簡單 合併兩個有序列表 c
題目為將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 其中存在乙個類,結構為 public class listnode 每乙個都會指向下乙個元素。編寫的c 如下 public static...