25. K 个一组翻转链表
面试真的碰到了,可惜没a出来。
没啥特殊的算法,就是很难绕出来感觉。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
hair := &ListNode{Next : head}
pre := hair
for head != nil{
tail := pre
for i := 0; i < k; i++{
tail = tail.Next
if tail == nil{
return hair.Next
}
}
nex := tail.Next
head, tail = newchange(head, tail)
pre.Next = head
tail.Next = nex
pre = tail
head = tail.Next
}
return hair.Next
}
func newchange(head, tail *ListNode)(*ListNode, *ListNode){
prev := tail.Next
p := head
for prev != tail{
nex := p.Next
p.Next = prev
prev = p
p = nex
}
return tail, head
}