请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

leetcode 237题 即下图21行,不理解为什么要写node = NULL;node不是被删除了吗,删除意味着什么,难道null还需要保存在节点里吗

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2017-07-15 03:03:15

在C++中,delete一个指针,表示将指针所指向的空间释放,但是这个指针本身还是会存储这个地址。此时访问这个地址是危险的(不一定报错,但是此时这个地址将来可能另作他用,而错误的访问这个指针的内容将会造成非常难以察觉的错误)。一般习惯在删除一个指针所指向的空间后,显示地为这个指针本身赋值为NULL。通常认为这样更安全。因为此时错误的访问这个指针,一定会因为访问了空指针而程序直接中断,使得容易找到错误的根源,但这不是必须的,属于一种编程习惯。


在网上搜一搜,还会有很多人探讨,C++标准应该自动将delete掉所指向空间的指针赋值为空。很有意思,比如这个:)


https://stackoverflow.com/questions/704466/why-doesnt-delete-set-the-pointer-to-null


加油!

3 回复 有任何疑惑可以回复我~
  • 易萧 #1
    意思是这里本身node=NULL是没什么用的只是一个编程习惯是吧,因为它马上就直接return了,node根本就不可能再用上。
    
    还有一个地方不太明白,如果node->next为空,那么直接删除掉node之后,仍然找不到node的前驱,前驱的next应该指向为空,但它现在仍然指向以前的node地址。
    回复 有任何疑惑可以回复我~ 2017-09-03 08:26:35
  • liuyubobobo 回复 易萧 #2
    在我们这段代码里,如果进入if(node->next==NULL)这段代码,意味着整个链表只有node一个节点。
    回复 有任何疑惑可以回复我~ 2017-09-03 08:58:22
  • 易萧 回复 liuyubobobo #3
    不是说node->next为空说明node是最后一个节点嘛,为什么会只有一个节点,比如像链表 1->2->3->4->NULL, 给出node为第四个节点
    回复 有任何疑惑可以回复我~ 2017-09-06 06:36:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信