lc-go/solutions/0/q25/solution.go
2026-01-07 18:04:39 +09:00

51 lines
770 B
Go

package q25
type ListNode struct {
Val int
Next *ListNode
}
func reverse(begin *ListNode, k int) (newHead, newTail *ListNode) {
tail := begin
for range k - 1 {
if tail.Next == nil {
return begin, tail // no enough nodes
}
tail = tail.Next
}
// Reverse
cur := begin
prev := tail.Next
for range k - 1 {
t := cur.Next
cur.Next = prev
prev, cur = cur, t
}
cur.Next = prev
return cur, begin
}
func reverseKGroup(head *ListNode, k int) *ListNode {
if k < 2 {
return head
}
var ret, prevTail *ListNode
p := head
for p != nil {
newHead, newTail := reverse(p, k)
if ret == nil {
ret = newHead
}
if prevTail != nil {
prevTail.Next = newHead
}
prevTail = newTail
p = newTail.Next
}
return ret
}
var _ = reverseKGroup