链表Java:我写了一个应该删除节点的方法,但它不起作用



我试图从我的列表中删除一个节点,但该节点没有消失。该方法应该遍历列表并检查toDelName ==是否有任何名称节点。如果是,那么它将删除该节点。

public static void removeName(String toDelName, Names list)
{
    Names current = list;
    while (current.next != null)
    {
        if (current.name.equalsIgnoreCase(toDelName))
        {
            current.prev.next = current.next;
            current.next.prev = current.prev;
        }
        current.prev = current;
        current = current.next;
    }
}
  1. 当你的条件不匹配时,继续前进。所以不需要current.prev = current;
  2. 当你需要删除列表的最后一个节点时,你也没有处理这种情况。

    public void removeName(String toDelName, Names list) {
      Names current = list;
      while (current.next != null) {
        if (current.name.equalsIgnoreCase(toDelName)) {
          current.prev.next = current.next;
          current.next.prev = current.prev;
          return;
        }
        current = current.next;
      }
      if (current.name.equalsIgnoreCase(toDelName)) {
        current.prev.next = null;
      }
    }
    

//打印检查列表

    public static void print(Names start) {
      while (start != null) {
        System.out.println(start.getName());
        start = start.getNext();
      }
    }

您的问题源自以下这行:

    current.prev = current;

你应该删掉那一行。原因是,每次这行被执行时,都是当前的。Prev被设置为当前。因此,在while循环的第一次迭代之后,current.prev.next(您尝试在if-case中赋值)将始终具有值current。下一个-你的作业

    current.prev.next = current.next;

因此什么也不做。

您可能试图以某种方式使用名称current更新对象。然而,这在面向对象编程中是不必要的。值current。Prev指向当前被分配给current.next时的更改

相关内容

  • 没有找到相关文章

最新更新