链表删除
约 8 分钟
删除 p 的下一个节点,只需让 p 的指针「跳过」它,直接指向下下个。被跳过的节点没人指着,就脱离了链表。
Node* del = p->next; // 要删的那个
if (del != nullptr) {
p->next = del->next; // p 直接指向下下个,跳过 del
delete del; // 释放内存,防止泄漏
}
删除节点要移动别的元素吗?不用。链表只改一条指针, 搞定;数组删中间元素得把后面一整片往前挪,。
考试常见坑:(1)先用临时指针存住要删的节点,改完 p->next 再 delete,否则先删了就找不到 del->next;(2)删之前判断 p->next 是不是 nullptr,尾节点后面没东西可删;(3)删头节点要特判:head = head->next;;(4)竞赛用数组模拟时,delete 换成改 nxt[p]=nxt[del] 即可,通常不真回收空间。
小纸条
删除节点需要移动别的元素吗?
登录 后可看答案