class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __str__(self):
return 'val:%d' % self.val
class Solution:
def reverseKGroup(self, head, k):
dummy = ListNode(0)
dummy.next = head
pre, tail = dummy, dummy
while tail.next:
count = k
while count and tail:
tail, count = tail.next, count-1
if not tail:
break
#(pre->start,tail->next)
start = pre.next
next = tail.next
tail.next = None
#翻转k个节点,即[start,tail]并连接好
pre.next = self.reverseList(start)
#[tail,start]--->next
start.next = next
#归位,为下一次翻转做准备
pre = start
tail = pre
return dummy.next
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
cur.next, pre, cur = pre, cur, cur.next
return pre
if __name__ == '__main__':
a = ListNode(1)
b = ListNode(2)
c = ListNode(3)
d = ListNode(4)
e = ListNode(5)
f = ListNode(6)
#构造一个简单链表
a.next, b.next, c.next, d.next, e.next = b, c, d, e, f
p = a
while(p):
print(p.val)
p=p.next
print("----------------")
p=Solution().reverseKGroup(a,5)
while(p):
print(p.val)
p = p.next
leetcode:25 reverse Nodes in k-Group python
最新推荐文章于 2020-10-16 21:03:21 发布