【问题标题】:Cant delete node from doubly linked list无法从双向链表中删除节点
【发布时间】:2021-08-07 16:07:21
【问题描述】:

这是我正在尝试做的方法......它总是打印“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;

}

【问题讨论】:

  • 请使用实际创建列表并调用此函数的代码扩展您的问题,以便我们可以运行它并重现问题。

标签: java data-structures methods linked-list doubly-linked-list


【解决方案1】:

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

current.setPrevious(current.getNext());

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

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

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

要删除current 节点,您需要:

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

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

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

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

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

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

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

之后,您可以将current节点的previousnext设置为null

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;
}

【讨论】:

  • 是的,你是对的。但是“名称已删除”也没有分配给变量 a。
  • 这意味着以下条件:您的方法中的current.getData().equals(name) 未被评估为真;你需要调试为什么会这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2013-09-01
相关资源
最近更新 更多