双指针
Go
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
var pre *ListNode
pre = nil
cur := head
for cur != nil {
nextP := cur.Next
cur.Next = pre
pre = cur
cur = nextP
}
return pre
}
头插法
Go
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
dummy := &ListNode{}
cur := head
for cur != nil {
next := cur.Next
cur.Next = dummy.Next
dummy.Next = cur
cur = next
}
return dummy.Next
}
递归
Go
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
// 现在节点
cur := head
// 保存下一个节点
next := cur.Next
ans := reverseList(next)
//下一个节点指向自己
next.Next = cur
// 自己指向空
cur.Next = nil
return ans
}