leetcode-go/src/reverse.go

59 lines
890 B
Go

package src
func reverse(root *ListNode) *ListNode {
var pre, tmp *ListNode
cur := root
for cur != nil {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}
/* 递归反转链表 */
func reverseRec(root *ListNode) *ListNode {
if root == nil || root.Next == nil {
return root
}
res := reverseRec(root.Next)
root.Next.Next = root
root.Next = nil
return res
}
/* K 个一组翻转链表 */
func reverseKGroup(root *ListNode, k int) *ListNode {
if root == nil {
return root
}
n := root
for i := 0; i < k; i++ {
if n == nil {
break
}
n = n.Next
}
tmp := reverseN(root, n)
root.Next = reverseKGroup(n, k)
return tmp
}
/* 反转链表到指定节点 */
func reverseN(root *ListNode, n *ListNode) *ListNode {
var pre, tmp *ListNode
cur := root
for cur != n {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}