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
|
func reverseKGroup(head *ListNode, k int) *ListNode { if k <= 1 head == nil head.Next == nil { return head } start,end,next,oldEnd, count := head,head,head,head, 0 for loop := 1;end != nil; loop++{ if loop % k == 0 { next,end.Next = end.Next, nil newHead := reverseList(start) if loop == k { head = newHead }else{ oldEnd.Next, oldEnd = newHead, start } start.Next,start,end = next,next,next }else{ end = end.Next count++ } } if count % k == 0 { reverseList(start) } return head }
func reverseList(head *ListNode) *ListNode { var prev *ListNode for head != nil { head.Next, prev, head = prev, head, head.Next } return prev }
|