gpt4 book ai didi

java - 链表的 remove() 方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:01 24 4
gpt4 key购买 nike

我正在上编程课,我有以下作业。

编写一个菜单驱动的程序,它要么接受单词及其含义,要么按字典顺序显示单词列表(即在字典中)。当要将条目添加到词典时,您必须首先将单词作为一个字符串输入,然后将其含义作为单独的字符串输入。另一个要求 - 有时单词会过时。发生这种情况时,必须从字典中删除该词。

使用 JOptionPane 类输入信息。

使用链表的概念来进行这个练习。您至少需要以下类(class):

  • 一个 WordMeaning 类,包含单词的名称及其含义。
  • 创建信息节点及其节点的 WordMeaningNode 类链接字段。
  • 一个 WordList 类,用于创建和维护单词和它们的含义。
  • 测试您的类(class)的字典类(class)。

对于输出,程序应生成两个可滚动列表:

  • 当前的单词列表及其含义。
  • 被删除单词的列表。您无需列出含义,只需

到目前为止,我已经对除 remove 方法之外的所有内容进行了编码,但我不确定如何对其进行编码,所以请任何人帮助我。我已经编写了 add 方法的代码,但现在我不知道从哪里开始我的 WordList 类中的 remove 方法。我的类(class)如下。

WordList 类:

public class WordList {

WordMeaningNode list;

WordList() {
list = null;
}

void add(WordMeaning w)// In alphabetical order
{
WordMeaningNode temp = new WordMeaningNode(w);

if (list == null)
list = temp;
else
{
WordMeaningNode aux = list;
WordMeaningNode back = null;
boolean found = false;

while(aux != null && !found)
if( temp.getWordMeaning().getName().compareTo(aux.getWordMeaning().getName()) < 0 )
found = true;
else
{
back = aux;
aux = aux.next;
}

temp.next = aux;
if (back == null)
list = temp;
else
back.next = temp;
}
}

boolean listIsEmpty() {
boolean empty;
if (list == null) {
empty = true;
} else {
empty = false;
}

return empty;
}

public String toString()
{
String result = "";
int count = 0;
WordMeaningNode current = list;

while (current != null)
{
count++;
result += current.getWordMeaning().getName() + "\n" + "\t" + current.getWordMeaning().getDefinition();
current = current.next;
}

return result + "\nThe number of words is : " + count;
}
}

我尝试对 remove 方法使用与对 add 方法相同的方法格式,但没有真正起作用,或者我做错了。

最佳答案

要从 LinkedList 中删除一个项目,您应该遍历它的节点。然后,如果找到事件,连接上一个和下一个节点,设置 previous.next = next:

boolean remove(String word) {

if (list == null) // list is empty
return false;

WordMeaningNode n = list;
WordMeaningNode prev = null;

do {
if (n.wordMeaning.name.equals(word)) { // word found
if (prev != null) {
prev.next = n.next; // connect previous to next
} else {
list = list.next; // connect head to next
}
return true;
}
prev = n;
n = n.next;
} while (n != null); // repeat till the end of a list
return false;
}

在主代码中,更改case 2部分:

if (diction.remove(word)) {
obsolete.add(new WordMeaning(word, " "));
// notify about deletion
} else {
// notify that word don't exist.
}

因为这里你真的不需要NullPointerException

关于java - 链表的 remove() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com