问题描述
我要编写一个菜单驱动的程序,该程序要么接受单词及其含义,要么按词典顺序显示单词列表(例如,在词典中)。 我必须编写的一种方法是删除方法。 分配基于链表的基本属性。 我们实际上并没有使用链表类。 这是我到目前为止所拥有的:
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时,列表都是完整的。 删除的单词仍在列表中。
1楼
也许是这样的吗?
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作为参数传递并返回指向头部的指针。
2楼
您所要做的就是更改行(我认为是第12行)
back = aux.next;
至
if (back == null)
list.next = aux.next;
else
back.next = aux.next;