JZ16 合併兩個排序的鍊錶

2021-10-10 03:26:43 字數 1009 閱讀 6302

題目描述

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

eg:輸入,輸出

題外話:小范說合在一起,再比大小不就完事了,這顯然是乙個簡單的方法,但不智慧型。

【官方解法】

1.迭代版本求解

初始化:定義cur指向新鍊錶的頭結點

操作:1.如果l1指向的結點值小於等於l2指向的結點值,則將l1指向的結點值鏈結到cur的next指標,然後l1指向下乙個結點值

2.否則,讓l2指向下乙個結點值

3.迴圈步驟1,2,直到l1或者l2為nullptr

4.將l1或者l2剩下的部分鏈結到cur的後面

技巧

一般建立單鏈表,都會設乙個虛擬頭結點,也叫哨兵,因為這樣每乙個結點都有乙個前驅結點。

/*

struct listnode

};*/

class

solution

else

cur = cur-

>next;

} cur-

>next = phead1 ? phead1 : phead2;

//判斷phead1是否有值,如果有則指向p1否則指向p2

return vhead-

>next;

//返回虛擬頭節點的next}}

;

對於這三行額外的解釋(前面欠下的章,現在解釋清楚了~~~):

return vhead-

>next;

//正確的結果是vhead的next中的結果

2.遞迴版本

class

solution

else}}

;

JZ16 合併兩個排序的列表

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。題解 我們已知是兩個遞增的鍊錶,需要把他合併成乙個遞增的鍊錶。1 我們需要乙個結果鍊錶,表示最後合併後的鍊錶。2 遍歷兩個鍊錶,如果 cur1 cur2,那麼就說明 list1 的當前結點小於 li...

16 合併兩個排序的鍊錶

題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 與歸併排序思路相同。用到了乙個小技巧,宣告頭節點時,不宣告為null,使資料域為0,返回時返回head.next,這樣在 不需要先給head賦值,比較簡潔。public class solutio...

16 合併兩個排序的鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。總結 要建立乙個新的頭結點,如果直接在l1 l2 上修改,鍊錶就會被更改,還要涉及到儲存結點,會使得問題複雜化。建立新的頭結點之後,每次都向後挪動一位,並且插入l1 l2 中的小值,對應的鍊錶挪動一位。tip...