力扣链接:
https://leetcode.cn/problems/reverse-nodes-in-k-group/
解题思路:
通过递归实现的,每次递归将以后链表的前 k 个节点进行翻转,并将翻转后的链表的尾节点连贯上递归后返回的链表的头节点,最终返回整个链表的新头节点
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
cur := head
for i := 0; i < k; i++ {
if cur == nil {return head}
cur = cur.Next
}
newHead := reverse(head, cur)
head.Next = reverseKGroup(cur, k)
return newHead
}
func reverse(start, end *ListNode) *ListNode {
var pre *ListNode
cur := start
for cur != end {
nxt := cur.Next
cur.Next = pre
pre = cur
cur = nxt
}
return pre
}