有序鍊錶的合併的一種實現

2021-09-27 11:14:03 字數 1044 閱讀 4517

概述:合併有序鍊錶的一種實現

在leetcode刷題的時候,碰到有序鍊錶的合併問題,第21題是兩個鍊錶的合併,第23提是k個鍊錶的合併,第23題利用第21題的解法,將兩個鍊錶合成乙個,再把合成的鍊錶作為新煉表和下乙個鍊錶合併即可。合併鍊錶有很多方法:

a.將所有節點拆開,放到陣列裡進行排序,再放回鍊錶,這種方法實現最簡單,但是放棄了鍊錶本身插入刪除成本低的優勢;

b.另一種方法是分別遍歷兩個鍊錶,將節點從小到大一次加到另外乙個新煉表中,這種方法也比較簡單,定義兩個指標分別遍歷就好;

c.第三種方法是遍歷其中一張表,將節點資料插入到另一張鍊錶對應的節點,這種方法的思路也簡單,很容易想到,但是實現起來會有一些坑,沒有ide的情況下除錯起來還是不太直觀的,其中需要特別注意的是頭插和尾插的處理。

**如下:

public class t23 

return p;

}/**

* 合併兩個有序鍊錶

* @param p 有序鍊錶1

* @param node 有序鍊錶2

* @return 鍊錶2插入到鍊錶1的合併結果

*/public static listnode mergetwolists(listnode p, listnode node)

if (node == null)

listnode pfirst = p;

listnode prep = p;

listnode curnode = node;

while (curnode != null) else if (prep != p) else

}// prep == p 說明在第乙個節點之前插入

if (prep == p)

// p == null 說明在末尾插入

if (p == null)

curnode = node;

p = pfirst;

prep = p;

}return pfirst;

}}class listnode

}

有序表的合併 煉表表實現

include using namespace std 函式結果狀態 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define maxsize 100 st...

實現2個有序鍊錶的合併

原題 本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。函式介面定義 list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode l...

兩有序鍊錶的合併

已知兩個鍊錶head1和head2各自有序,請把它們合成乙個鍊錶依然有序。保留所有結點,即便大小相同 鍊錶節點結構 typedef struct node node 合併函式的介面為 node merge node head1,node head2 答 node merge node head1,n...