单向链表删除中间某个节点

                //这种写法感觉和下面没什么区别啊,只是将temp.next 赋给了 deleteNode  而已
                if(key.equals(temp.next.key)) {
                //假设temp.next 是要删除的节点
                    Node deleteNode = temp.next;                    
                    temp.next = deNode.next;                                        
                    deNode.next = null;    
                }  
                
                //为什么这种写法会将(temp.next)节点 和 (temp.next.next节点后面) 的所有的节点全部删除了
                if(key.equals(temp.next.key)) {
                //假设temp.next 是要删除的节点                    
                    temp.next = temp.next.next;                                        
                    temp.next.next = null;    

                }
阅读 4k
2 个回答

第二个写法,因为你temp.next = temp.next.next; 这句已经把temp.next改变了,已经不指向要删除的节点,此时你temp.next.next = null不是把被删除节点的next清除,而是把后面的节点全部删除。

if(key.equals(temp.next.key)) {

            //假设temp.next 是要删除的节点                    
                temp.next = temp.next.next;                                        
            }

上面代码可以删除,但可能会导致内存泄漏(这里看不出会泄露)。

第一种链表图如下所示:

clipboard.png

  • 第一种内容表达是仅仅删除deNode节点

第二种链表操作如下所示

clipboard.png

  • 第二种表达的删除了temp.next节点
  • 同时也删除了temp.next.next后面所有的节点
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏