LeetCode题解(python)
23. 合并K个排序链表
题目描述
合并 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 not lists:
return []
else:
while len(lists)!=1:
left = 0
right = len(lists)-1
while left<right:
list_1 = lists.pop(right)
list_2 = lists.pop(left)
list_m = ListNode(-1)
list_merge = list_m
while True:
if list_1 !=None and list_2 != None:
if list_1.val>=list_2.val:
list_m.next = ListNode(list_2.val)
list_2 = list_2.next
else:
list_m.next = ListNode(list_1.val)
list_1 = list_1.next
elif list_1 == None and list_2 != None:
list_m.next = ListNode(list_2.val)
list_2 = list_2.next
elif list_1 != None and list_2 == None:
list_m.next = ListNode(list_1.val)
list_1 = list_1.next
else:
lists.insert(0,list_merge.next)
break
list_m = list_m.next
left = left+1
right = right-1
return lists[0]