leetcode206
思路:
改变单链表next指向
- 方法一(双指针):
bak := cur.Next
必须要备份当前节点的下一个节点。不然
cur.next = pre
就把他原来的next指向断了,再cur=cur.next
cur
就不会往下走了,
func reverseList(head *ListNode) *ListNode {
cur := head
var pre *ListNode
for cur!=nil{
// 必须要备份当前节点的下一个节点
bak := cur.Next
cur.Next = pre
pre = cur
cur = bak
}
return pre
}
- 方法二:(递归)
注意递归结束条件是,cur
=nil
,其实和双指针差不多,只是双指针用for
来遍历,而这个这是在条件内递归调用自己,两个都用cur=cur.next
来维护运行,而一旦不符合条件,则返回。
func reverseList(head *ListNode) *ListNode {
return self(nil, head)
}
func self(pre ,head *ListNode)*ListNode{
if head!=nil{
// 必须要备份当前节点的下一个节点
bak := head.Next
head.Next = pre
pre = head
head = bak
return self(pre, head)
}else{
return pre
}
}