牛课力扣---NC70 单链表的排序

在这里插入图片描述

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
# 
# @param head ListNode类 the head node
# @return ListNode类
#
class Solution:
    def sortInList(self , head ):
        # write code here
        
        #辅助数组
#         主要通过辅助数组实现链表的排序
# 1、遍历链表并将链表结点存储到数组 tmp 中
# 2、通过对 tmp 进行排序,实现链表结点的排序
# 3、构建新链表结点 result,遍历数组 tmp ,拼接新的返回链表
        tmp = []
        tmp.append(head.val)
        # 遍历链表存储到数组中
        while head.next:
            head = head.next
            tmp.append(head.val)
        # 数组排序
        tmp.sort()
         # 重新构造新链表结点
        res = ListNode(-1)
        stack = res
      # 遍历数组,将数组中元素添加到新的链表中
        for i in tmp:
            tt = ListNode(i)
            stack.next = tt
            stack = stack.next
        return res.next
# 时间复杂度O(NlogN):N表示链表结点数量,遍历链表O(N),数组排序(NlogN),遍历数组O(N)
# 空间复杂度O(N):使用额外数组占用空间O(N)
        

        
 
#         #方案1:未调试成功,不知是否可行,理解上,将链表数据提出转成列表,然后利用sorted排序,再转成链表数据
#         if head == None:
#             return head
#         else:
#             stack1 = []
#             stack = []
#             res = ListNode(0)
#             dummy = res
#             while head:
#                 stack1.append(head.val)
#                 head = head.next
#             stack = sorted(stack1)
#             for i in stack:
#                 dummy = ListNode(i)
#                 dummy = dummy.next
#             return res.next
        
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值