合併兩個排序的鍊錶

2022-09-09 10:48:14 字數 625 閱讀 3811

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

首先考慮將兩個鍊錶的第乙個元素比較拿到新鍊錶的頭結點,作為新鍊錶的頭,然後將兩個鍊錶逐個比較取較小結點放在新鍊錶的後面,直至有鍊錶出現null。

學習單鏈表的時候寫頭插尾插頭刪尾刪都可以順利寫出,沒想到單鏈表的題目比較刁鑽,這裡走了不少彎路,先是新鍊錶的頭結點怎麼獲取有點糊塗,如果放在迴圈內將導致丟失指標,放在迴圈外的話,迴圈內的控制又有點糊塗。

struct listnode* mernode(struct listnode* l1,struct listnode*l2)

else

struct listnode* newhead=head;//

新結點while(n1 && n2)//

採用&&是因為無論哪個結點出現null都要停止

else

}if(n1)

if(n2)

return

newhead;

}

後來看到別人另外一種思路,所謂哨兵結點,自己建立乙個偽頭,這樣就不用糾結頭結點的處理了。

另外還有一種方法,將所有結點的val比較後儲存在新建的陣列裡,然後將val push到各個結點上,不過感覺有點麻煩。

合併兩個排序鍊錶

struct listnode class solution else while pstart1 null pstart2 null plast next pstart1 plast pend1 pend1 pend1 next pstart1 pend1 else plast next psta...

合併兩個排序鍊錶

描述 將兩個排序鍊錶合併為乙個新的排序鍊錶樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 將兩個鍊錶當中的對應元素的值進行比較,重新確定新鍊錶當中元素的位置。若第乙個鍊錶當前位置的值小於第二個鍊錶當前值,則不需要改變位置,第乙個鍊錶的指標...

合併兩個排序鍊錶

問題描述 將兩個排序鍊錶合併為乙個新的排序鍊錶 樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 遍歷第二個鍊錶的每乙個節點,然後與第乙個節點的第乙個節點比較,如果第二個鍊錶節點的值小於第乙個,就插入到第乙個煉表裡,如果大於就到下乙個節點。...