K 个一组翻转链表

题目:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/

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
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
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
}

路漫漫其修远兮!