题解 | #合并k个已排序的链表#

合并k个已排序的链表

http://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param lists ListNode类一维数组 
# @return ListNode类
#
class Solution:
    def mergeKLists(self , lists: List[ListNode]) -> ListNode:
        # write code here
        length = len(lists) #获取列表长度
        listnew = [] #生成一个空列表
        if length < 1 : #如果长度为0,返回空
            return None
        if length == 1: #如果长度为1,返回第一个元素
            return lists[0]
        for i in range(0,length,2):#依次从列表中取两个链表进行比较并合并,生成一个新的链表,并添加到空列表中
            pre = cur = ListNode(0) #生成一个空链表,用于缓存两两链表合并后的链表
            if i != length - 1:#如果不是最后一个链表进行如下合并操作
                while lists[i] and lists[i + 1]:#如果第i个和第i+1个链表不为空,进行如下合并操作
                    if lists[i].val < lists[i + 1].val:#如果前一个链表的数小于第二个链表
                        cur.next = lists[i]#将list[i]挂接到cur上
                        lists[i] = lists[i].next#移动list【i】的指针位置
                    else:#如果前一个链表的值不小于第二个链表的值
                        cur.next = lists[i + 1]#将第二个链表当前指针挂接到cur上
                        lists[i + 1] = lists[i + 1].next#移动指针位置
                    cur = cur.next #移动cur当前指针
                cur.next = lists[i] or lists[i + 1]#上面循环完成后,两个链表必有一个为空,一个不为空,不为空的指针位置在最后一个数,将指针挂接到cur
                listnew.append(pre.next)#将合并完成的链表添加到listnew
            else:#如果当前是列表的最后一个链表,因为没有可以比较的链表,直接将该链表添加到listnew
                listnew.append(lists[i])
        return Solution.mergeKLists(self,listnew) #递归调用函数,入参为上面生成的新的列表,最终返回结果为列表的第0号链表。
        
            
全部评论
清晰有效
点赞 回复 分享
发布于 2023-03-05 11:35 重庆

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务