二叉树之下

链表删除--二级指针

2018-08-05  本文已影响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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读