合併兩個有序的單鏈表

2021-08-07 07:08:50 字數 577 閱讀 5060

題目:合併兩個遞增的單鏈表,使合併後的新鍊錶中的節點依然是按照遞增排序的。鍊錶結點定義如下:

struct listnode

;

分析:我們從煉表頭結點開始分析,如果鍊錶1頭結點的值小於鍊錶2頭結點的值,那麼鍊錶1的頭結點就是合併後新鍊錶的頭結點。

我們繼續合併兩個鍊錶中剩餘的結點,依舊是比較兩個煉表頭結點的值,找出小的那個連線到合併後新鍊錶的尾部。

我們發現合併的步驟都是一樣的,所以這是乙個遞迴的過程。

注意:我們要注意鍊錶為空時的處理方式,如果乙個鍊錶為空,那它和另乙個鍊錶合併之後的結果就是另外那個鍊錶。如果兩個鍊錶都是空鍊錶,那麼合併後依舊是空鍊錶。

過程用圖表示:

最後附上**:

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

else

return mergenode;

}

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...