J'ai un problème dans lequel je dois créer (1) une liste de mots liés et (2) pour chaque mot une liste chaînée séparée pour stocker les adresses de ce mot (urls dans ce cas, comme vous pouvez l'imaginer comme un moteur de recherche: un mot-clé est identifié/contenu dans des URL spécifiques).Liste de liens simples pour stocker des mots et des adresses en Java
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;
}
}
Je veux que la sortie soit quelque chose comme ceci: Disons que je créé un premier noeud de mot (wnode) « A », et il est d'abord url jamais « a.com » (en unode) en faisant engine.insert("A", "a.com)
, donc System.out.println(engine)
devrait me donner la sortie:
A: a.com
Ensuite, si je engine.insert("A", "b.com")
un nouveau nœud de mot NE dOIT PAS être lié à la liste chaînée du noeud mot (s) et maintenant « b.com » devrait être lié dans la liste liée de l'URL de A. La sortie doit être:
A: a.com b.com
Cependant, lorsque je tente de faire engine.insert("B", "c.com")
, ce que je veux est qu'un nouveau nœud de texte doit être LIÉ (car il n'y a qu'un seul nœud de mot (ce qui est d'A)) au lien liste des noeuds de mot (s) et maintenant ce « milieu » du nœud de mot est attaché à la variable de référence de noeud url local (unode) et la sortie doit être:
A: a.com b.com
B: c.com
Mais quand je lance ceci, cela est la sortie :
A: a.com b.com
B: a.com b.com c.com
Qu'est-ce que je fais mal ici? Je pense que ma logique est bonne. Est-ce dû à la méthode toString()
? J'ai besoin d'aide sérieuse. Toute aide est la bienvenue. Merci!
Merci de m'avoir aidé. –