题目:
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
dummy := &ListNode{Next:head}
p := head
pre := dummy
for p != nil {
tail := p
for i := 0; i < k - 1; i ++ {
tail = tail.Next
if tail == nil {
return dummy.Next
}
}
// nex := tail.Next
head, tail := reverse(p, tail)
pre.Next = head
pre = tail
p = tail.Next
}
return dummy.Next
}
func reverse(head, tail *ListNode) (*ListNode, *ListNode) {
pre := tail.Next
p := head
for pre != tail {
nex := p.Next
p.Next = pre
pre = p
p = nex
}
return tail, head
}