簡體   English   中英

用於在Java中存儲單詞和地址的單鏈接列表

[英]Singly linked list for storing word and addresses in Java

我遇到一個問題,我需要創建(1)單詞的鏈接列表,並且(2)為每個單詞創建一個單獨的鏈接列表,用於存儲該單詞的地址(在這種情況下,URLs就像搜索引擎一樣:在特定的網址中標識/包含一個關鍵字)。

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”,並且通過執行engine.insert("A", "a.com)它是第一個URL“ a.com”(在unode中) engine.insert("A", "a.com) ,因此System.out.println(engine)應該給我輸出:

A: a.com

接下來,如果我執行engine.insert("A", "b.com") ,則engine.insert("A", "b.com")將新的單詞節點鏈接到單詞節點的鏈接列表,現在應將“ b.com”鏈接到A的網址中鏈表。 輸出應為:

A: a.com b.com

但是,當我嘗試執行engine.insert("B", "c.com") ,我想要的是將一個新的單詞節點鏈接到(因為只有一個單詞節點(屬於A的單詞))字節點的鏈表,現在該字節點的“中間”已附加到本地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;
}

除了toString()方法外,您的實現邏輯還可以。 完成一個WNode ,您必須清空包含相應UNode內容的字符串。

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;
        str = ""; //empty the string here
    }
    return str1;
}

看看第二行,我在這里評論。 這是您必須插入才能使其正常工作的內容。 否則,您將隨時間添加所有UNode的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM