-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path25.k-个一组翻转链表.go
53 lines (49 loc) · 916 Bytes
/
25.k-个一组翻转链表.go
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
/*
* @lc app=leetcode.cn id=25 lang=golang
*
* [25] K 个一组翻转链表
*/
// @lc code=start
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head, tail *ListNode) (*ListNode, *ListNode) {
prev, pointer := head, head.Next
head.Next = nil
for {
next := pointer.Next
pointer.Next = prev
prev = pointer
pointer = next
if prev == tail {
break
}
}
return prev, head
}
func reverseKGroup(head *ListNode, k int) *ListNode {
if k == 1 {
return head
}
headBefore := &ListNode{Next: head}
prev := headBefore
for head != nil {
for i := 1; i < k; i++ {
head = head.Next
if head == nil {
return headBefore.Next
}
}
next := head.Next
first, last := reverseList(prev.Next, head)
last.Next = next
prev.Next = first
prev, head = last, next
}
return headBefore.Next
}
// @lc code=end