美文网首页二叉树之下
链表删除--二级指针

链表删除--二级指针

作者: 祝方泽 | 来源:发表于2018-08-05 19:44 被阅读1次

    教科书上的链表删除节点

    list_delete.wa.png
    用一个指针cur遍历链表,同时维护其前驱pre

    也可以这样(leveldb中LRUCache链表使用的该方法删除节点)

    list_delete.ac.png
    假设待删除节点用绿色×表示,删除它意味着要进行绿色虚线的指针操作;而绿色虚线的操作,需要更改一级指针的值,可以使用二级指针完成更改一级指针的操作
    这里的原理是:二级指针拥有直接改变一级指针值的能力。
    void delete_node(ListNode* & head, const ListNode* need_delete_node) {
        ListNode** p = &head;
        while (*p != NULL && *p != need_delete_node) {
            p = &((*p)->next);
        }
        if (*p != NULL) {
            ListNode* tmp = *p;
            *p = (*p)->next;
            delete tmp;
        }
    }

    相关文章

      网友评论

        本文标题:链表删除--二级指针

        本文链接:https://www.haomeiwen.com/subject/ghfivftx.html