📅  最后修改于: 2023-12-03 15:19:34.898000             🧑  作者: Mango
本程序旨在合并K个已排序的链表,以生成一个新的有序链表。
我们可以采用递归的方式来操作每个链表节点,从而实现链表的合并。
具体步骤如下:
1.定义一个merge2Lists函数,用来合并两个有序链表。
2.定义一个mergeKLists函数,用来合并所有的链表。
3.调用mergeKLists函数,将K个链表合并成一个新的有序链表。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def merge2Lists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
#如果其中一个链表为空,则直接返回另一个链表
if not l1:
return l2
if not l2:
return l1
#如果l1的第一个节点的值小于l2的第一个节点的值,则将l1的第一个节点与合并后的链表的下一个节点连接起来
if l1.val < l2.val:
l1.next = self.merge2Lists(l1.next, l2)
return l1
#否则将l2的第一个节点与合并后的链表的下一个节点连接起来
else:
l2.next = self.merge2Lists(l1, l2.next)
return l2
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
#如果列表为空,则返回None
if not lists:
return None
#如果只有一个列表,则直接返回该列表
if len(lists) == 1:
return lists[0]
#如果有多个列表,则将其拆分为两个子列表,然后将两个子列表进行递归合并
mid = len(lists)//2
left = self.mergeKLists(lists[:mid])
right = self.mergeKLists(lists[mid:])
#将两个子列表进行合并
return self.merge2Lists(left, right)
本程序实现了合并K个已排序的链表的功能,并采用了递归的方式来操作每个链表节点,从而实现链表的合并。