劍指 Offer 25 合併兩個排序的鍊錶

2021-10-08 10:42:27 字數 1380 閱讀 3471

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

示例1:

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

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

限制:0 <= 鍊錶長度 <= 1000

解題思路

萬能雙指標

定義雙指標l,r分別指向l1和l2。

分別比較l1所指向的值和l2所指向的值的大小。

l>r r++ 當l所指向的值大於r所指向的值,記錄r的val並且r後移

l==r l++ 當l所指向的值等於r所指向的值,記錄l的val並且l後移

l輸入:1->2->4, 1->3->4

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

l1:1->2->4

l 指標

l2:1->3->4

r 指標

ans: null12

345此時l指向1 r指向1 lr 所以 記錄l的值並且l後移

l1:1->2->4

l 指標

l2:1->3->4

r 指標

ans: 112

345此時l指向2 r指向1 l>r 所以 記錄r的值並且r後移

l1:1->2->4

l 指標

l2:1->3->4

r 指標

ans: 1->112

345此時l指向2 r指向3 l2->4

l 指標

l2:1->3->4

r 指標

ans: 1->1->212

345此時l指向4 r指向3 l>r 所以 記錄r的值並且r後移

l1:1->2->4

l 指標

l2:1->3->4

r 指標

ans: 1->1->2->312

345此時l指向4 r指向4 lr 所以 記錄l的值並且l後移

此時ans: 1->1->2->3->4

結束但是我們需要注意有可能有一種情況,在l走完或者r走完但是r並沒有走完l並沒有走完,所以我們需要在尾部加上未走完的那部分

**class solution

else if (l.val <= r.val)

}//在l走完或者r走完但是r並沒有走完l並沒有走完,所以我們需要在尾部加上未走完的那部分

if (l == null) temp.next = r;

if (r == null) temp.next = l;

return ans.next;}}

1234

5678

9101112

1314

1516

1718

1920

2122

2324

2526

2728

劍指offer 25 合併兩個排序的鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。1 非遞迴的方法 如果可以改變鍊錶,直接從頭結點開始依次移動比較兩個鍊錶當前值的大小,把較小的值作為當前結點的下乙個結點。注意 剛剛開始的時候不知道頭結點到底是1的還是2的,所以新建乙個額外的新節點作為輔助 ...

劍指offer25 合併兩個排序的鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然使遞增排序的。例如 輸入下圖的鍊錶1和鍊錶2,則合併之後的公升序鍊錶如圖鍊錶3所示。鍊錶定義如下 思路 從兩個鍊錶的頭結點開始,比較兩個鍊錶的頭結點的值大小,值小的結點就是合併後鍊錶的頭結點,繼續合併鍊錶中剩餘的節點,在兩個鍊錶中剩下...

劍指offer 25 合併兩個排序的鍊錶

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。輸入 1 3 5 2 4 5 輸出 1 2 3 4 5 5 二路歸併 新建乙個頭節點pmergedhead,並設定乙個指標pcurrenthead指向pmergedhead比較phead1和phead2指標指向的值 phead...