package main
import . "nc_tools"
/*
//递归,时空On
func reverseKGroup( head *ListNode , k int ) *ListNode {
// write code here
cur := head
for i := 0; i < k; i++ {
if cur == nil {
return head
}
cur = cur.Next
}
pre := reverseKGroup(cur, k)
curr := head
for i := 0; i < k; i++ {
temp := curr.Next
curr.Next = pre
pre = curr
curr = temp
}
return pre
}
*/
//迭代,时间On,空间O1
func reverseKGroup(head *ListNode, k int) *ListNode {
dummy := &ListNode{Next : head}
prem := dummy
for head != nil { //分组
cur := prem //不是head哦
for i := 0; i < k; i++ {
cur = cur.Next
if cur == nil {
return dummy.Next
}
}
tmp := cur.Next
head, cur = myReverse(head, cur) //翻转
prem.Next = head //合并
cur.Next = tmp
prem = cur
head = cur.Next
}
return dummy.Next
}
func myReverse(head, cur *ListNode) (*ListNode, *ListNode) {
pre := cur.Next
modn := head
for pre != cur {
temp := modn.Next
modn.Next = pre
pre = modn
modn = temp
}
return cur, head
}