初級演算法 合併兩個有序鍊錶

2021-09-29 13:11:49 字數 1308 閱讀 4025

合併兩個有序鍊錶

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

示例:輸入:1->2->4, 1->3->4

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

不會 看的題解

思路1:遞迴

先檢查是否為空 其中乙個為空 直接返回非空鍊錶 兩個都為空的話 返回null

先比較兩個鍊錶的頭結點,較小的選擇作為後續所有元素的頭結點,後續元素是將較小元素的後乙個節點作為頭結點的剩餘鍊錶,與另沒變化的鍊錶作為引數再次呼叫mergetwolists函式 以此類推。

沒看懂的地方時 遞迴呼叫後 返回值 和遞迴結束的條件?

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

if(l2==

null

)else

if(l1-

>val>val)

else}}

;

思路二:迭代法

思路比較順暢 最好畫圖理解 類似於雙指標的感覺

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

if(l2==

null

)//prehead節點用於儲存第乙個節點 方便在最後返回頭結點時 可以找到

//pre節點儲存當前節點之一 pre是不斷更新的

listnode* prehead=

newlistnode(-

1);//值-1是隨便給的吧

listnode* pre=prehead;

//迴圈結束條件時 只要有乙個鍊錶為空

while

(l1!=

null

&&l2!=

null

)else

pre=pre-

>next;

}//此時 可能l1或者l2之一為null 直接將剩餘的拼接在後面即可

pre-

>next=l1==

null

?l2:l1;

//prehead的下乙個即是合併後的鍊錶

return prehead-

>next;}}

;

演算法 合併兩個有序鍊錶

有兩種方法,迭代和遞迴。迭代 不帶頭結點 node merge node head1 node head2 else 當前排序好的鍊錶的末尾節點 node pcurrent head while p1 null p2 null else 還有一方沒有遍歷完的情況 if p1 null pcurren...

演算法 合併兩個有序鍊錶

1.迭代,新建乙個哨兵節點,通過它的next指標指向串聯起兩個鍊錶 比較 l1 和 l2哪乙個比較小,讓哨兵節點的next指向比較小的節點 哨兵節點 l1 l2依次後推,直到又乙個鍊錶為空 如果 l1 為空,則哨兵節點指向l2 注意返回值為哨兵節點的next,因為哨兵節點的第乙個值是隨意給的 cla...

leetcode初級鍊錶之合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 definition for singly linked list.struct listnode struct listnode merge...