当前位置: 首页 > article >正文

leetcode hot100 排序链表

148. 排序链表

已解答

中等

相关标签

相关企业

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

# Definition for singly-linked list.

# class ListNode(object):

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution(object):

    def sortList(self, head):

        """

        :type head: Optional[ListNode]

        :rtype: Optional[ListNode]

        """

        # 排序至少是nlogn的,直接全部排序一个个连起来得了

        # if head==None:

        #     return None

        # arr=[]

        # while head:

        #     arr.append(head)

        #     head=head.next

       

        # arr.sort(key=lambda x:x.val)

        # prev = ListNode(-1)

        # for index ,node in enumerate(arr):

        #     prev.next = node

        #     prev = node

       

        # # print(arr)

        # arr[-1].next=None

        # return arr[0]

        # 这个面试的时候很难这么搞啊

        # 这个merge的时候是左闭合,右开

        return self.sortFunc(head,None)

    def merge(self,list1,list2):

        prev = ListNode(-1)

        temp ,temp1, temp2 = prev , list1,list2

        while temp1 and temp2:

            if temp1.val<=temp2.val:

                temp.next = temp1

                temp1=temp1.next

            else:

                temp.next = temp2

                temp2=temp2.next

            temp = temp.next

        if temp1:

            temp.next = temp1

        elif temp2:

            temp.next = temp2

        return prev.next

        # 如果两个都是空,return也是空

    def sortFunc(self,head,tail):

        # 利用快慢指针,得到mid,然后使用merge(左右两个递归的序列)

        if not head:

            return head

        if head == tail:

            return None

        if head.next==tail:

            head.next=None

            return head

        # 如果head是空,那就返回空

        fast , slow = head,head

        while fast!=tail:

            fast = fast.next

            slow = slow.next

            if fast!=tail:

                fast = fast.next

        return self.merge(self.sortFunc(head,slow),self.sortFunc(slow,tail))






 

如果实际遇到的话,我直接来个放到arr里面

但是面试的话,我们这里直接是来个归并排序


http://www.kler.cn/a/458574.html

相关文章:

  • SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现
  • SpringBoot获取bean的几种方式
  • 因为错误修改 /etc/security/limits.conf 里 nofile 设置导致 CentOS 无法登录
  • Atlassian和AWS宣布达成战略合作协议,推动企业云迁移
  • 冰狐智能辅助使用adb实现自动化脚本
  • Apollo中间件技术:从入门到精通
  • redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线
  • 在VS编译器中引用Vue3框架教程
  • Java中StopWatch的使用详解
  • 什么是双塔模型?
  • Linux环境Docker安装Postgres
  • kubernetes学习-集群搭建部署(一)
  • React 中 createContext 和 useContext 的深度应用与优化实战
  • SOME/IP 协议详解——序列化
  • 黑马Java面试教程_P2_MySQL
  • 【Linux】:线程安全 + 死锁问题
  • Cadence学习笔记 13 结构件导入与器件定位
  • 闪极科技,何以抢先进入AI眼镜产业化元年?
  • 聊聊 Mongod 以及 MongoDB 常用命令
  • AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进