25. Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
Note:
Only constant extra memory is allowed.
You may not alter the values in the list’s nodes, only nodes itself may be changed.
https://zxi.mytechroad.com/blog/list/leetcode-25-reverse-nodes-in-k-group/
func reverseKGroup(head *ListNode, k int) *ListNode {
if head == nil || k == 1 {
return head
}
dummy := &ListNode{Val: 0}
dummy.Next = head
node := dummy
lg := 0
for head != nil {
lg++
head = head.Next
}
for i := 0; i+k <= lg; i += k {
cur := node.Next
next := cur.Next
for j := 1; j < k; j++ {
cur.Next = next.Next
next.Next = node.Next
node.Next = next
next = cur.Next
}
node = cur
}
return dummy.Next
}