25. K 个一组翻转链表
最后更新于
最后更新于
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
dummy := &ListNode{-1, head}
cur, pre := dummy, dummy
cnt := 0
for cur.Next != nil {
cur = cur.Next
cnt++
if cnt%k == 0 {
next := cur.Next
cur.Next = nil
nh, nt := reverse(pre.Next)
pre.Next = nh
nt.Next = next
pre, cur = nt, nt
}
}
return dummy.Next
}
func reverse(head *ListNode) (*ListNode, *ListNode){
cur := head
var pre, next *ListNode
for cur != nil {
next = cur.Next
cur.Next = pre
pre = cur
cur = next
}
return pre, head
}