首页 > 解决方案 > 无法从双向链表中删除节点

问题描述

这是我正在尝试做的方法......即使存在要删除的名称,它也总是打印“Nothing to delete1”。

public String deleteName(String name){
    Node current, previous;
   
    String a ="";
     current = start;
     previous = null;
     
      while(current != null && !current.getData().getName().equals(name)  ){
         current = current.getNext();
         a = "Nothing to delete1"; 
      }
      if(current == null){
         a = "Nothing to delete";
      }
      
     if(current.getData().equals(name)){
        a = "name deleted";
        current.setPrevious(current.getNext());
        current.setNext(null);
        
     }

  return a;

}

标签: javadata-structuresmethodslinked-listdoubly-linked-list

解决方案


您的问题在于如何更新不同节点之间的链接以从链接列表中删除特定节点。

current.setPrevious(current.getNext());

上面的语句将节点的previous链接设置current为节点旁边的current节点;这是不正确的。

上面的语句做了以下操作:

|next node| <--- |current node|

要删除current节点,您需要:

  1. 设置next前一个节点的指向该节点旁边的current节点

    current.getPrevious().setNext(current.getNext());
    

    基本上,您想要执行以下操作:

    |previous node| ---> |next node|
    
  2. 设置previous节点的,节点旁边的current,指向节点之前的current节点

    current.getNext().setPrevious(current.getPrevious());
    

    在这里,您要执行以下操作:

    |previous node| <--- |next node|
    

之后,您可以将节点的and设置previousnextcurrentnull

current.setNext(null);
current.setPrevious(null); 

我会重写你的方法,如下所示:

public String deleteName(String name){
   
    String result = "";
    Node current = start;
    Node previous = null;
     
    while(current != null && !current.getData().getName().equals(name)){
       current = current.getNext();
    }
      
    if(current == null){
       result = "Nothing to delete";
    } else {
       current.getPrevious().setNext(current.getNext());
       current.getNext().setPrevious(current.getPrevious());

       current.setNext(null);
       current.setPrevious(null); 
       
       result = "name deleted";
    }

    return result;
}

推荐阅读