歸併有序迴圈鍊錶

2022-07-22 13:57:19 字數 964 閱讀 3772

思路:另外新建乙個獨立的鍊錶作為合併的結果。設定兩個指標,分布從兩個表頭開始,依次向後移動,並不斷比較他們所指的元素的大小關係,每次把比較小的結點複製到新的迴圈鍊錶中。

時間複雜度:每個結點訪問一次,時間代價為o(n)。其中,n為鍊錶list1和list2長度的最大值。

程式**:

linklist combine_clink(linklist list1,linklist list2)

linklist list3 = (linklist)malloc(sizeof(struct node));

pnode p1 = list1->link,p2 = list2->link,p3 = list3;

if(p1 == list1 && p2 == list2)    //如果list1和list2都是空表,則讓空表頭結點的指標指向頭結點自己

list3->link = list3;

return list3;

while(p1 != list1 || p2 != list2)

p3->link = (pnode)malloc(sizeof(struct node));

p3 = p3->link;

if(p2 == list2 || (p1 != list1 && p1->info <= p2->info))

//如果list2已搜尋完畢,或者list1的當前元素不大於鍊錶list2的當前元素

p3->info = p1->info;

p1 = p1->link;

else

//如果list1已搜尋完畢,或者鍊錶list1的當前元素大於鍊錶list2的當前元素

p3->info = p2->info;

p2 = p2->link;

p3->link = list3;

return list3;

合併有序鍊錶

將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的,即不開闢新的記憶體空間 首先,為了方便操作鍊錶,我們定義乙個dummyhead,我們遍歷兩個鍊錶,直到其中有乙個到達尾部,則停下來 在遍歷的過程中,我們將元素值小的節點依次鏈在mergerlist的後邊,最後,我們看看哪...

合併有序鍊錶

題目描述將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的。塊 listnode mergetwolists listnode l1,listnode l2 if l2 null if l1 val l2 val else listnode pre target list...

合併有序鍊錶

21.合併兩個有序鍊錶 難度簡單912收藏分享切換為英文關注反饋 將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4class solution def mergetwolists self...