leetcode 【 Sort List 】 python 实现
题目:
Sort a linked list in O(n log n) time using constant space complexity.
代码:oj 测试通过 Runtime: 372 ms
1 # Definition for singly-linked list. 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 # @param head, a ListNode 9 # @return a ListNode 10 def sortList(self, head): 11 12 if head is None or head.next is None: 13 return head 14 15 slow = head 16 fast = head 17 18 while fast.next is not None and fast.next.next is not None: 19 slow = slow.next 20 fast = fast.next.next 21 22 h1 = head 23 h2 = slow.next 24 slow.next = None 25 l1 = self.sortList(h1) 26 l2 = self.sortList(h2) 27 head = self.mergeTwoLists(l1,l2) 28 29 return head 30 31 # merger two sorted list 32 def mergeTwoLists(self, l1, l2): 33 if l1 is None: 34 return l2 35 if l2 is None: 36 return l1 37 38 p = ListNode(0) 39 dummyhead = p 40 41 while l1 is not None and l2 is not None: 42 if l1.val > l2.val: 43 p.next = l2 44 l2 = l2.next 45 else: 46 p.next = l1 47 l1 = l1.next 48 p = p.next 49 50 if l1 is None: 51 p.next = l2 52 else: 53 p.next = l1 54 55 return dummyhead.next
思路:
归并排序的原理无需多说,感觉像小学老师给卷子排序:每个小组的组内成绩由低到高排序;小组长再交给大组长;大组长再交给老师。
小白实现的步骤是先测试通过mergeTwoLists函数,实现两个有序list的合并。详情见http://www.cnblogs.com/xbf9xbf/p/4186905.html这篇日志。
在实现两个有序链表的合并基础上,再在主程序写递归程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?