LeetCode No 21 合併兩個有序鍊錶

2021-10-04 03:47:15 字數 976 閱讀 6373

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

示例:輸入

輸出1->2->4, 1->3->4

1->1->2->3->4->4

考慮用乙個新的鍊錶 l 來記錄合併後的鍊錶,用節點 t 記錄鍊錶的合併過程,節點 t 的初始化與節點 l 指向同一記憶體空間;當鍊表 l1 和 l2 非空時,依次按順序遍歷兩個鍊錶的節點值,較小的節點則連線在 t 節點的後面,直至任意乙個鍊錶為空。

此處節點 t 不斷後移記錄合併過程時節點 l 並不會隨之後移,原因是初始化時節點 t 與節點 l 指向同一記憶體空間,當鍊表中的最小節點首次連線在節點 t 的後面時,也就同時連線在了節點 l 的後面,當節點 t 發生後移時,節點 l 仍然指向該記憶體空間並沒有發生任何改變 。

注意:當鍊表 l1 或 l2 為空時,直接將另外乙個鍊錶連線至節點 t 的後面即可;

此處用 new 函式為鍊錶 l 動態申請了空間,因此在不再使用 l 時應釋放申請的記憶體空間,否則會造成記憶體洩漏;並且要在在返回合併鍊錶前進行記憶體釋放,因為 return 語句代表當前函式的結束,其後的語句將不會執行,因此需要在記憶體釋放前將合併後的結果鍊錶儲存一下。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else}if

(l1 ==

null

)else

listnode* mergedlist = l -

> next;

//l節點後面的鍊錶即為合併的結果鍊錶,用mergedlist記錄;

delete l;

//釋放申請的記憶體空間;

return mergedlist;}}

;

執行用時:8 ms

記憶體消耗:8.1 mb

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先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...