這里主要是使用分治算法思想解決對于給定的n個有序的鏈表,進行合并操作之后還是一個有序的鏈表。如下例子:
添加圖片注釋,不超過 140 字(可選)文章來源:http://www.zghlxwxcb.cn/news/detail-824183.html
添加圖片注釋,不超過 140 字(可選)
如果想要合并n個有序的鏈表,首先需要直到合并兩個有序鏈表的方法,如果定義一個新的節(jié)點,然后將兩個鏈表中的節(jié)點按照大小順序逐個加入即可,python實現(xiàn)的代碼如下:
def merge2links(self, head1, head2):
point=mergedhead=ListNode(None)
while head1 and head2:
if head1.val <= head2.val:
point.next = head1
head1 = head1.next
else:
point.next = head2
head2 = head2.next
point = point.next
if not head1:
point.next=head2
else:
point.next=head1
return mergedhead.next
以第二個例子為例展示兩個鏈表合并的過程:
合并前兩個鏈表的初始狀態(tài)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
在合并的最后就是此時的head1是空,需要結(jié)束while循環(huán)并將point的下一個位置指向head2即可,將mergedhead.next返回,即為合并之后的鏈表的頭結(jié)點了。
在直到兩個有序鏈表的合并之后,需要考慮如何n各有序鏈表,需要利用n個頭指針同時進行對比操作這很繁瑣易出錯,所以我們可以考慮將n個鏈表兩兩合并,最終合并成為一個鏈表。以8個鏈表合并為例如下:
添加圖片注釋,不超過 140 字(可選)
python實現(xiàn)的完整代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-824183.html
class Solution(object):
def mergenlinks(self, links):
length=len(links)
iterval=1
while length>iterval:
for i in range(0,length-iterval,iterval*2):
links[i]=self.merge2links(links[i],links[i+iterval])
iterval*=2
return links[0] if length>0 else None
def merge2links(self, head1, head2):
point=mergedhead=ListNode(None)
while head1 and head2:
if head1.val <= head2.val:
point.next = head1
head1 = head1.next
else:
point.next = head2
head2 = head2.next
point = point.next
if not head1:
point.next=head2
else:
point.next=head1
return mergedhead.next
到了這里,關(guān)于python解決合并排序列表問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!