2022-05-22 15:54:36 +00:00
|
|
|
package src
|
|
|
|
|
2022-05-23 08:43:38 +00:00
|
|
|
func Reverse(root *ListNode) *ListNode {
|
|
|
|
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-05-23 08:43:38 +00:00
|
|
|
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 {
|
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
|
|
|
|
}
|
|
|
|
tmp := ReverseN(root, n)
|
|
|
|
root.Next = ReverseKGroup(n, k)
|
|
|
|
return tmp
|
|
|
|
}
|
|
|
|
|
2022-05-23 08:43:38 +00:00
|
|
|
/* 反转链表到指定节点 */
|
|
|
|
func ReverseN(root *ListNode, n *ListNode) *ListNode {
|
|
|
|
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
|
|
|
|
}
|