教科书上的链表删除节点
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;
}
}
网友评论