链接列表Java:我写了一个应该删除节点的方法,但是它没有用

时间:2015-09-17 18:04:59

标签: java linked-list nodes

我正在尝试从列表中删除节点,但节点不会消失。该方法应该遍历列表并检查toDelName ==任何名称节点。如果是,那么它将删除该节点。

.ui-fieldset-legend .ui-fieldset-toggler.ui-icon-plusthick { /* plus */ }
.ui-fieldset-legend.ui-state-hover .ui-fieldset-toggler.ui-icon-plusthick { /* plus */}
.ui-fieldset-legend .ui-fieldset-toggler.ui-icon-minusthick { /* minus */ }
.ui-fieldset-legend.ui-state-hover .ui-fieldset-toggler.ui-icon-minusthick { /* minus */}

2 个答案:

答案 0 :(得分:0)

您遇到的问题是:

    current.prev = current;

您应该删除该行。原因是,每次执行该行时,current.prev都会设置为current。因此,在while循环的第一次迭代之后,current.prev.next(在if-case中尝试分配)将始终具有值current.next - 您的赋值

    current.prev.next = current.next;
因此,什么都不做。

您可能尝试以某种方式更新名称为current的对象。但是,这在面向对象编程中不是必需的。一旦current被分配给current.next,值current.prev就会指向更改。

答案 1 :(得分:0)

  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;
      }
    }
    
  3. //打印列表以供检查。

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