合併兩個排序的鍊錶

2021-08-03 04:08:46 字數 1054 閱讀 6909

1 /*

2     合併兩個排序的鍊錶

3     輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的點仍然是按照遞增排序的。鍊錶結點定義為:

4     struct lsitnode

5     ;

9     1->3->5->7

10     2->4->6->8

11     容易犯的錯誤是 在寫**之前沒有對合併的過程想清楚 最終合併出來的鍊錶要麼從中間斷開了要麼沒有對合併的過程想清楚,最終合併出來的鍊錶要麼中間斷開要麼並沒有做到遞增排序。

二是**在魯棒性方面存在問題,程式一旦有特殊的輸入就會崩潰。

12     合併兩個鍊錶首先從兩個鍊錶的頭結點開始,鍊錶1的頭結點的值小於鍊錶2頭結點的值,因此鍊錶1的頭結點將是合併後鍊錶的頭結點。

13     所以繼續合併鍊錶中剩餘的結點,在兩個鍊錶中剩下的結點依然是排序的,因此合併這兩個鍊錶的步驟和前面的步驟是一樣的。我們還是比較兩個頭結點的值,此時鍊錶2的頭結點的值小於》    鍊錶1頭結點的值,因此鍊錶2的頭結點的值將是合併剩餘結點得到的鍊錶的頭結點。我們把這個結點和前面合併鍊錶時得到的鍊錶的尾結點鏈結起來。

14     所以綜上可以發現 就是一系列的遞迴過程,可以用遞迴函式來解決

15     每當**試圖訪問空指標指向的記憶體程式時程式就會奔潰,從而導致程式魯棒性問題。在本題時一旦輸入空的鍊錶就會引入空的指標,因此我們要對空鍊錶單獨處理。當第乙個鍊錶時空鍊錶

,也就是它所指向的頭結點時乙個空指標時,那麼把它和第二個鍊錶合併,顯然合併的結果就是第二個鍊錶。同樣,當輸入的第二個鍊錶的頭結點時空指標的時候,我們把它和第乙個鍊錶合併得

到的結果就是第乙個鍊錶。如果兩個鍊錶都是空鍊錶,合併的結果是得到乙個空鍊錶。

16     **如下:

17 */

19 listnode* merge(listnode* phead1,listnode* phead2)

20 32 else

33

37 return pmergedphead;

38 }

合併兩個排序鍊錶

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。解題思路 遍歷第二個鍊錶的每乙個節點,然後與第乙個節點的第乙個節點比較,如果第二個鍊錶節點的值小於第乙個,就插入到第乙個煉表裡,如果大於就到下乙個節點。...