当前位置: 代码迷 >> java >> 删除链表Java中的节点
  详细解决方案

删除链表Java中的节点

热度:102   发布时间:2023-07-31 12:04:20.0

我要编写一个菜单驱动的程序,该程序要么接受单词及其含义,要么按词典顺序显示单词列表(例如,在词典中)。 我必须编写的一种方法是删除方法。 分配基于链表的基本属性。 我们实际上并没有使用链表类。 这是我到目前为止所拥有的:

public String delete(String a) {
    boolean found = false;
    WordNode aux = list;
    WordNode back = null;
    String deleted = "";

    while (aux != null && !found) {

        if (a.equalsIgnoreCase(aux.getAll().getWord())) {
            deleted = deleted + aux.getAll().getWord();

            back = aux.next;

            aux = null;

            found = true;
        } else {

            back = aux;
            aux = aux.next;

        }

    }
    return deleted;
}

但是,每当我在主类中调用delete方法,然后再调用toString时,列表都是完整的。 删除的单词仍在列表中。

也许是这样的吗?

public String delete(String a) {
    WordNode aux = list;
    WordNode back = null;        

    while (aux != null) {

      if (a.equalsIgnoreCase(aux.getAll().getWord())) {

        if (back != null) {
            //change the pointer from the previous node to the one after the deleted one
            back.next = aux.next;
        } else {
            //first node was found, so modify list to point his successor as the new head
            list = aux.next; 
        }
        return a;
      } else {
        back = aux;
        aux = aux.next;
      }

   }
   return ""; //no node was found
}

这应该符合您的合同,但是我会考虑将list作为参数传递并返回指向头部的指针。

您所要做的就是更改行(我认为是第12行)

back = aux.next;

if (back == null)
  list.next = aux.next;
else
  back.next = aux.next;
  相关解决方案