1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package main
import "fmt"
type ListNode struct { Val int Next *ListNode }
func reverseKGroup(head *ListNode, k int) *ListNode { count := 0 current := head for count < k { if current == nil { return head } current = current.Next count++ }
prev := reverseList(head, current)
head.Next = reverseKGroup(current, k)
return prev }
func reverseList(head, tail *ListNode) *ListNode { var prev, next *ListNode current := head
for current != tail { next = current.Next current.Next = prev prev = current current = next }
return prev }
func printList(head *ListNode) { current := head for current != nil { fmt.Printf("%d ", current.Val) current = current.Next } fmt.Println() }
func main() { head := &ListNode{Val: 1} head.Next = &ListNode{Val: 2} head.Next.Next = &ListNode{Val: 3} head.Next.Next.Next = &ListNode{Val: 4} head.Next.Next.Next.Next = &ListNode{Val: 5}
k := 2
result := reverseKGroup(head, k)
fmt.Print("反转后的链表: ") printList(result) }
|