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
    }
}
分类: 算法

站点统计

  • 文章总数:309 篇
  • 分类总数:19 个
  • 标签总数:191 个
  • 运行天数:1009 天
  • 访问总数:129525 人次

浙公网安备33011302000604

辽ICP备20003309号