Skip to content

Commit 6c77d0a

Browse files
authored
Update 0148-排序链表.py
1 parent afeb11d commit 6c77d0a

File tree

1 file changed

+53
-4
lines changed

1 file changed

+53
-4
lines changed

0148.排序链表/0148-排序链表.py

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ def sortList(self, head):
1010
:type head: ListNode
1111
:rtype: ListNode
1212
"""
13-
#1. 一分为二
14-
#2. 各自排序
15-
#3. 合二为一
13+
#1. 一分为二
14+
#2. 各自排序
15+
#3. 合二为一
1616

1717
if not head or not head.next:
1818
return head
@@ -48,4 +48,53 @@ def merge(self, l1, l2):
4848
tmp = ListNode(l2.val)
4949
tmp.next = self.merge(l1, l2.next)
5050

51-
return tmp
51+
return tmp
52+
53+
# 应该和上面的思路相同
54+
#1. 一分为二
55+
#2. 各自排序
56+
#3. 合二为一
57+
class Solution:
58+
def sortList(self, head: ListNode) -> ListNode:
59+
if not head or not head.next:
60+
return head
61+
slow = head
62+
fast = head
63+
# 用快慢指针分成两部分
64+
while fast.next and fast.next.next:
65+
slow = slow.next
66+
fast = fast.next.next
67+
# 找到左右部分, 把左部分最后置空
68+
mid = slow.next
69+
slow.next = None
70+
# 递归下去
71+
left = self.sortList(head)
72+
right = self.sortList(mid)
73+
# 合并
74+
return self.merge(left, right)
75+
76+
def merge(self, left, right):
77+
dummy = ListNode(0)
78+
p = dummy
79+
l = left
80+
r = right
81+
82+
while l and r:
83+
if l.val < r.val:
84+
p.next = l
85+
l = l.next
86+
p = p.next
87+
else:
88+
p.next = r
89+
r = r.next
90+
p = p.next
91+
if l:
92+
p.next = l
93+
if r:
94+
p.next = r
95+
return dummy.next
96+
97+
作者Junhao
98+
链接https://leetcode.cn/problems/sort-list/solutions/215640/lc148-jian-ji-pythongui-bing-shi-xian-by-jhhuang/
99+
来源力扣LeetCode
100+
著作权归作者所有商业转载请联系作者获得授权非商业转载请注明出处

0 commit comments

Comments
 (0)