leetcode-go/src/reverse.go

59 lines
890 B
Go
Raw Permalink Normal View History

2022-05-22 15:54:36 +00:00
package src
2022-06-20 12:26:14 +00:00
func reverse(root *ListNode) *ListNode {
2022-05-23 08:43:38 +00:00
var pre, tmp *ListNode
2022-05-22 15:54:36 +00:00
cur := root
for cur != nil {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}
2022-05-23 08:48:35 +00:00
/* 递归反转链表 */
2022-06-20 12:26:14 +00:00
func reverseRec(root *ListNode) *ListNode {
2022-05-23 08:43:38 +00:00
if root == nil || root.Next == nil {
return root
}
2022-06-20 12:26:14 +00:00
res := reverseRec(root.Next)
2022-05-23 08:43:38 +00:00
root.Next.Next = root
root.Next = nil
return res
}
/* K 个一组翻转链表 */
2022-06-20 12:26:14 +00:00
func reverseKGroup(root *ListNode, k int) *ListNode {
2022-05-22 15:54:36 +00:00
if root == nil {
return root
}
n := root
for i := 0; i < k; i++ {
if n == nil {
break
}
n = n.Next
}
2022-06-20 12:26:14 +00:00
tmp := reverseN(root, n)
root.Next = reverseKGroup(n, k)
2022-05-22 15:54:36 +00:00
return tmp
}
2022-05-23 08:43:38 +00:00
/* 反转链表到指定节点 */
2022-06-20 12:26:14 +00:00
func reverseN(root *ListNode, n *ListNode) *ListNode {
2022-05-23 08:43:38 +00:00
var pre, tmp *ListNode
2022-05-22 15:54:36 +00:00
cur := root
for cur != n {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}