leetcode-25 K个一组翻转链表


&此题为使用 链表/ Linked List 求解的典型 &

25. K 个一组翻转链表

难度: 困难


考察:

  1. 对链表翻转算法的熟悉程度
  2. 对递归算法的理解程度



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func reverseKGroup(head *ListNode, k int) *ListNode {
node := head
for i := 0; i < k; i++ {
if node == nil {
return head
}
node = node.Next
}
newHead := reverse(head, node)
head.Next = reverseKGroup(node, k)
return newHead
}

func reverse(first *ListNode, last *ListNode) *ListNode {
prev := last
for first != last {
tmp := first.Next
first.Next = prev
prev = first
first = tmp
}
return prev
}

文章目录