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

0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

站点统计

  • 文章总数:304 篇
  • 分类总数:19 个
  • 标签总数:189 个
  • 运行天数:852 天
  • 访问总数:460550 人次
ICP备案号: 辽ICP备20003309号