21 合併兩個有序鍊錶

2021-10-02 01:37:46 字數 1045 閱讀 2030

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

示例:首先,我們設定乙個哨兵節點 「dummyhead」 ,這可以在最後讓我們比較容易地返回合併後的鍊錶。我們維護乙個 prev 指標,我們需要做的是調整它的 next 指標。然後,我們重複以下過程,直到 l1 或者 l2 指向了 null :如果 l1 當前位置的值小於等於 l2 ,我們就把 l1 的值接在 prev 節點的後面同時將 l1 指標往後移乙個。否則,我們對 l2 做同樣的操作。不管我們將哪乙個元素接在了後面,我們都把 prev 向後移乙個元素。

在迴圈終止的時候, l1 和 l2 至多有乙個是非空的。由於輸入的兩個鍊錶都是有序的,所以不管哪個鍊錶是非空的,它包含的所有元素都比前面已經合併鍊錶中的所有元素都要大。這意味著我們只需要簡單地將非空鍊錶接在合併鍊錶的後面,並返回合併鍊錶。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

listnode* dummyhead =

newlistnode(0

);listnode* list = dummyhead;

while

(l1 !=

null

&& l2 !=

null

)else

list = list-

>next;

} list-

>next = l1 ==

null

? l2 : l1;

return dummyhead-

>next;}}

;

時間複雜度:o(min(m,n)) 。因為每次迴圈迭代中,l1 和 l2 只有乙個元素會被放進合併鍊錶中, while 迴圈的次數等於兩個鍊錶的總長度。所有其他工作都是常數級別的,所以總的時間複雜度是線性的。

空間複雜度:o(1)。迭代的過程只會產生幾個指標,所以它所需要的空間是常數級別的。

21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 原本想的是用19題的結構陣列那種方法來做 分別遍歷兩個鍊錶,建立結構儲存原始索引,val和指標,氣泡排序這個結構,更新索引,按照索引建立新的n...

21 合併兩個有序鍊錶

合併兩個有序鍊錶 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4比較簡單,比較大小,重新排序即可。created by hints on 2019 1 9.include using name...

21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...