# Definition for singly-linked list. classListNode(object): def__init__(self, x): self.val = x self.next = None
classSolution(object): defreverse(self, prev, end, k): end_next = end.next head = prev.next p1 = head p2 = head.next while p2 != end_next: next = p2.next p2.next = p1 p1 = p2 p2 = next head.next = end_next prev.next = p1 return head
defreverseKGroup(self, head, k): """ :type head: ListNode :type k: int :rtype: ListNode """ ifnot head ornot head.next or k < 2: return head
dummy = ListNode(-1) dummy.next = head prev = dummy while head: end = head for i in xrange(k - 1): if end: end = end.next ifnot end: # not enough k nodes break prev = self.reverse(prev, end, k) head = prev.next return dummy.next