/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func reverseKGroup(head *ListNode, k int) *ListNode { tail := peekK(head, k) if tail == nil { return head } var ( res = tail prevHead *ListNode nextHead *ListNode ) for tail != nil { if prevHead != nil { prevHead.Next = tail } nextHead = tail.Next tail.Next = nil reverse(head) prevHead = head head = nextHead tail = peekK(head, k) } if prevHead != nil { prevHead.Next = head } return res}func peekK(head *ListNode, k int) (tail *ListNode) { k-- for head != nil && k > 0 { head = head.Next k-- } if k == 0 && head != nil { return head } return nil}func reverse(head *ListNode) { var ( prev *ListNode next *ListNode ) for head != nil { next = head.Next head.Next = prev prev = head head = next }}