| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | package main/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func reverseKGroup(head *ListNode, k int) *ListNode {	if head == nil || head.Next == nil || k <= 1 {		return head	}	beforeBeg, beg, end, afterEnd := (*ListNode)(nil), head, head, head.Next	for end.Next != nil {		counter := 1		for end.Next != nil && counter < k {			end = end.Next			afterEnd = end.Next			counter++		}		if counter != k {			// Dont need to reverse			return head		}		// Reverse k node from beg to end		prev, curr, next := beforeBeg, beg, beg.Next		// Reverse all link between beforBeg & afterEnd		for i := 1; i < k; i++ {			prev = curr			curr = next			next = next.Next			curr.Next = prev		}		if beforeBeg == nil {			head = end		} else {			beforeBeg.Next = end		}		beg.Next = afterEnd		// Update anchor node		beforeBeg = beg		beg = beforeBeg.Next		end = beg		if end == nil {			return head		}		afterEnd = end.Next	}	return head}// func main() {// 	// 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7// 	n7 := ListNode{7, nil}// 	n6 := ListNode{6, &n7}// 	n5 := ListNode{5, &n6}// 	n4 := ListNode{4, &n5}// 	n3 := ListNode{3, &n4}// 	n2 := ListNode{2, &n3}// 	n1 := ListNode{1, &n2}// 	printList(&n1)// 	printList(reverseKGroup(&n1, 5))// 	// 0// 	n0 := ListNode{0, nil}// 	printList(reverseKGroup(&n0, 1))// }
 |