链表删除

8 分钟

删除 p 的下一个节点,只需让 p 的指针「跳过」它,直接指向下下个。被跳过的节点没人指着,就脱离了链表。

Node* del = p->next;      // 要删的那个
if (del != nullptr) {
    p->next = del->next;  // p 直接指向下下个,跳过 del
    delete del;           // 释放内存,防止泄漏
}

删除节点要移动别的元素吗?不用。链表只改一条指针, 搞定;数组删中间元素得把后面一整片往前挪,

考试常见坑:(1)先用临时指针存住要删的节点,改完 p->nextdelete,否则先删了就找不到 del->next;(2)删之前判断 p->next 是不是 nullptr,尾节点后面没东西可删;(3)删头节点要特判:head = head->next;;(4)竞赛用数组模拟时,delete 换成改 nxt[p]=nxt[del] 即可,通常不真回收空间。

小纸条

删除节点需要移动别的元素吗?

登录 后可看答案

链表删除 · 考级冲刺 · op599 课程