Q:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
if len(lists)==0:
return None
if len(lists)==1:
return lists[0]
return self.merge(lists,0,len(lists)-1)
def merge(self,lists,left,right):
if left==right:
return lists[left]
mid=(left+right)//2
l1=self.merge(lists,left,mid)
l2=self.merge(lists,mid+1,right)
return self.mergeTwo(l1,l2)
#合并两个链表
def mergeTwo(self,l1,l2):
if not l1:return l2
if not l2:return l1
if l1.val < l2.val:
l1.next=self.mergeTwo(l1.next,l2)
return l1
else:
l2.next=self.mergeTwo(l1,l2.next)
return l2
本文介绍了一种高效算法,用于合并多个已排序的链表并保持结果链表的有序性。通过递归地将链表两两合并,最终得到完全排序的链表。此方法在处理大量链表合并时特别有效。
662

被折叠的 条评论
为什么被折叠?



