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