java - Java中用于存储单词和地址的单链表

标签 java search linked-list

我遇到一个问题,我需要创建(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/

相关文章:

java - Maven Archetype 上的 charsetName 引起的 MojoFailureException

java - ArrayList 图书搜索

c - 输出链表到txt文件

java - 了解链表 (Java)

java - 在 eclipse-Java 中重写 hashCode()

java - Android MediaRecorder JNI(Delphi)的问题

python - (多少)在相互检查 2 个列表时先排序哪个重要?

c++ - 我的复制构造函数弄乱了列表中的第一个元素

java - CSV 保留 CRLF 同时替换 LF

search - 使用 DIH (DataImportHandler) 的动态列名