Tip4
复习delete p,delete指针只是释放了那个指针原本所指的内存,并没有删除该指针。而在释放内存后,p会变成一个乱指的野指针,所以需要对p = nullptr;置空操作
为什么不是NULL呢?
查源代码发现#define NULL ((void *)0),也就是说NULL实际上是0,C++11加入了nullptr,可以保证在任何情况下都代表空指针,所以建议以后都用nullptr。
移除链表元素
一句话总结:让前一个节点指向下下个,然后删除中间的节点
两种方法:一种是把头节点拿出来单独讨论(注意是while不是if)
另一种是增加一个虚拟头节点(return虚拟节点的下一个节点)
while (cur->next != NULL) {
if(cur->next->val == val) {
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
} else {
cur = cur->next;
}
}
- 时间复杂度: O(n)
- 空间复杂度: O(1)