我遇到一个问题,我需要创建(1)单词的链接列表和(2)为每个单词创建一个单独的链接列表,用于存储该单词的地址(在本例中为 url,您可以将其想象为一个搜索引擎:关键字被识别/包含在特定的网址中)。
public class SearchEngine {
WNode whead;
public void insert(String word, String url) {
WNode wnode = new WNode(word);
UNode unode = new UNode(url);
if (whead == null) {
whead = wnode;
wnode.mid = unode;
}
else {
WNode wtemp = whead;
while (wtemp.next != null && !wtemp.word.equals(wnode.word)) {
wtemp = wtemp.next;
}
if (wtemp.word.equals(wnode.word)) {
UNode utemp = wtemp.mid;
while (utemp.next != null) {
utemp = utemp.next;
}
utemp.next = unode;
wnode = null;
}
else {
wtemp.next = wnode;
wnode.mid = unode;
}
}
}
public String toString() {
WNode wordTemp = whead;
String str = "";
String str1 = "";
while (wordTemp != null) {
UNode urlTemp = wordTemp.mid;
while (urlTemp != null) {
str += urlTemp.url + " ";
urlTemp = urlTemp.next;
}
str1 += wordTemp.word + ": " + str + "\n";
wordTemp = wordTemp.next;
}
return str1;
}
public static void main(String[] args) {
SearchEngine engine = new SearchEngine();
engine.insert("A", "a.com");
engine.insert("A", "b.com");
engine.insert("B", "c.com");
System.out.println(engine);
}
}
class WNode {
String word;
UNode mid;
WNode next;
WNode(String word) {
this.word = word;
}
}
class UNode {
String url;
UNode next;
UNode(String url) {
this.url = url;
}
}
我希望输出是这样的:
假设我创建了第一个单词节点(wnode)“A”,并且它是第一个 url“a.com”(在 unode 中),方法是 engine.insert("A", "a.com)
,所以 System.out.println(engine)
应该给我输出:
A: a.com
接下来,如果我执行engine.insert("A", "b.com")
,则新的单词节点不得链接到单词节点的链接列表,现在“b.com”应该链接到A的url的链表中。输出应该是:
A: a.com b.com
但是,当我尝试执行 engine.insert("B", "c.com")
时,我想要的是应该链接一个新的单词节点(因为只有一个单词节点(属于 A))到单词节点的链表,现在这个单词节点的“mid”被附加到本地 url 节点(unode)引用变量,输出应该是:
A: a.com b.com
B: c.com
但是当我运行它时,这是输出:
A: a.com b.com
B: a.com b.com c.com
我在这里做错了什么?我觉得我的逻辑没问题。这是因为 toString()
方法吗?我需要一些认真的帮助。任何帮助将不胜感激。谢谢!
最佳答案
您没有在外部 while 循环中重置 str
,这会导致它将 url 传递到下一次迭代。请参阅下面的固定 toString()
:
public String toString() {
WNode wordTemp = whead;
String str1 = "";
while (wordTemp != null) {
String str = "";
UNode urlTemp = wordTemp.mid;
while (urlTemp != null) {
str += urlTemp.url + " ";
urlTemp = urlTemp.next;
}
str1 += wordTemp.word + ": " + str + "\n";
wordTemp = wordTemp.next;
}
return str1;
}
关于java - Java中用于存储单词和地址的单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46360439/