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

链表删除--二级指针

作者: 祝方泽 | 来源:发表于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