題目描述:
合併 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為...