题目
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
进阶:
你可以设计一个只使用常数额外空间的算法来解决此问题吗?
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
链接
答案
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
cur := head
for i := 1; 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
for start != end {
start, pre, start.Next = start.Next, start, pre
}
return pre
}