您的位置:首页 > 其它

leetcode 23 Merge k Sorted Lists

2015-04-12 17:09 357 查看
Merge k Sorted Lists

Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.

可以通过leetcode 21的merge Two Lists来解决。

如果从头到尾依此合并,会超时。

改用分治法来调用。链表个数l>3时,mergeTwoLists(self.mergeKLists(lists[:l/2]),self.mergeKLists(lists[l/2:l]))

# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None

class Solution:
# @param two ListNodes
# @return a ListNode
def mergeTwoLists(self, l1, l2):
if l1==None:
return l2
if l2==None:
return l1
if l1.val<=l2.val:
head=l1
l1=l1.next
else:
head=l2
l2=l2.next
p=head
while l1 and l2:
if l1.val<=l2.val:
p.next=l1
p=p.next
l1=l1.next
else:
p.next=l2
p=p.next
l2=l2.next
while l1:
p.next=l1
p=p.next
l1=l1.next
while l2:
p.next=l2
p=p.next
l2=l2.next
return head

# @param a list of ListNode
# @return a ListNode
def mergeKLists1(self, lists):
l=len(lists)
if l==0:
return None
if l==1:
return lists[0]
head=self.mergeTwoLists(lists[0],lists[1])
for i in range(2,l):
head=self.mergeTwoLists(head,lists[i])
return head

# @param a list of ListNode
# @return a ListNode
def mergeKLists(self, lists):
l=len(lists)
if l==0:
return None
elif l==1:
return lists[0]
elif l==2:
return self.mergeTwoLists(lists[0],lists[1])
else:
return self.mergeTwoLists(self.mergeKLists(lists[:l/2]),self.mergeKLists(lists[l/2:l]))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: