Skip to content

Commit 5200467

Browse files
committed
update: a difficult link list question
1 parent 17d27bb commit 5200467

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

list.reverse-nodes-in-k-group.py

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
2+
class ListNode:
3+
def __init__(self, x):
4+
self.val = x
5+
self.next = None
6+
7+
class Solution:
8+
"""
9+
25. K 个一组翻转链表
10+
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
11+
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
12+
k 是一个正整数,它的值小于或等于链表的长度。
13+
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
14+
"""
15+
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
16+
dummy = ListNode(0)
17+
dummy.next = head
18+
pre, end = dummy, dummy
19+
while end is not None:
20+
i = 0
21+
# 循环获取待处理的最后一个节点
22+
while i < k and end:
23+
end = end.next
24+
i += 1
25+
26+
# 如果没有,则代表最后一轮不足 k 个,不用处理
27+
if not end: break
28+
29+
# 断开链表
30+
start = pre.next
31+
next = end.next
32+
end.next = None
33+
34+
# 翻转数组
35+
pre.next = self.reverse(start)
36+
start.next = next
37+
38+
# 进行下一组处理
39+
pre = start
40+
end = pre
41+
return dummy.next
42+
43+
def reverse(self, head):
44+
pre = None
45+
cur = head
46+
while cur is not None:
47+
tmp = cur.next
48+
cur.next = pre
49+
pre = cur
50+
cur = tmp
51+
return pre
52+
53+
# 转换数组到链表
54+
def convertArr2Link(self, arr):
55+
if len(arr) == 0:
56+
return
57+
res = n = ListNode(0)
58+
for i in arr:
59+
n.next = ListNode(i)
60+
n = n.next
61+
62+
return res.next
63+
64+
65+
66+
so = Solution()
67+
# node = so.reverseList()
68+
params = [1, 2, 3, 4, 5, 6, 7, 8]
69+
70+
# 打印链表
71+
def printList(link):
72+
print(link.val)
73+
while(link.next is not None):
74+
link = link.next
75+
print(link.val)
76+
77+
printList(so.reverse(so.convertArr2Link(params)))
78+

0 commit comments

Comments
 (0)