23 合併K個排序鍊錶 有序鍊錶的合併問題

2021-08-19 04:47:49 字數 995 閱讀 3442

題目描述:

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[ 1->4->5,

1->3->4,

2->6

] 輸出: 1->1->2->3->4->4->5->6

題目分析:

首先寫乙個將兩個有序鍊錶合併為乙個鍊錶的函式,使用此函式將lists中的所有鍊錶依次合併到第乙個鍊錶當中。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

else

if(l1!=

null

&&l2==

null)

else

if(l1==

null

&&l2==

null)

listnode*ans,*p;

if(l1->val<=l2->val)

else

p=ans;

while(l1!=

null

&&l2!=

null)

else

}while(l1!=

null)

while(l2!=

null)

p->next=

null; //將鍊錶的結尾置為null;

return ans;

}listnode* mergeklists(vector& lists)

listnode*ans=lists[0]

; for(int i=1;i[i]

); //處理所有的鍊錶

}return ans;

}};

23 合併k個有序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6我們熟悉的是兩個鍊錶之間的合併,這道題的難點在於k值是不固定的,並不知道要合併多少鍊錶。一種很常見的想法就是使用分治法,因為合併兩個有序鍊錶是合併k...

leetcode 鍊錶 23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 definition for singly linked list.struct listnode struct listnode mergetw...

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 偷懶直接複製了以前的堆的 所有看上去長了點 class priorityqueue priority是設定優先順序 true為大根堆 false為...