当前位置: 代码迷 >> 综合 >> Leetcode刷题(21) 链表反转系列
  详细解决方案

Leetcode刷题(21) 链表反转系列

热度:78   发布时间:2024-01-30 18:28:43.0

Leetcode刷题(21) 链表反转系列

具体方法参考labuladong的如何k个一组反转链表,该比较是用python的实现

25. K 个一组翻转链表

reverse(a, b)使用的是迭代的方法,在开区间[a, b)中反转链表,reverseKGroup(a, k)使用的是递归的方法。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution(object):def reverseKGroup(self, head, k):""":type head: ListNode:type k: int:rtype: ListNode"""def reverse(a, b):pre = Nonecur = anxt = awhile(cur != b):# 记录下当前要翻转节点的nextnxt = cur.next# 翻转当前节点cur.next = pre# update cur and prepre = curcur = nxtreturn preif head == None:return Nonea = headb = headfor i in range(0, k):# 剩下的node不满足k个直接返回当前的head不做反转if b == None:return headb = b.nextnewHead = reverse(a, b)# a作为组中新的最后一个节点, next指向后继, 也就是下一组的newHeada.next = self.reverseKGroup(b, k)# head.next = self.reverseKGroup(b, k)return newHead