Для домашней работы я должен создать круговой список, используя узлы и указатели.
Это мой класс узлаВставка в двойной круговой связанный список в java
class Node implements Serializable {
public String theName; //the wrapped name
public Node next; //the next node in the sequence
public Node prev; //the previous node in the sequence
public Node(Node p, String s, Node n){
prev = p;
theName = s;
next = n;
}
}
Я пытаюсь вставить строки (имена) в передней части списка, а затем распечатать их с помощью траверсы методы.
До сих пор это мои траверсы и вставные методы ...
public class ListImpl /*implements List*/ {
Node list;
public ListImpl() {
list = new Node(list, null, list);
}
public void insert(String s) {
if (list == null) {
list = new Node(list, s, list);
} else {
list = new Node(list.prev, s, list);
list.next.prev = list;
list.next.next = list;
}
}
public void traverse(ASCIIDisplayer out) {
Node p = new Node(null, null, null);
p = list;
if (list != null) {
while(true) {
out.writeString(p.theName);
p = p.next;
}
} else {
throw new EmptyListException();
}
}
}
Я понимаю, что мой траверс метод мне непрерывный цикл, и я должен выяснить, как сделать его остановить, когда он возвращается к началу из списка, но это не моя проблема.
Я считаю, что моя проблема заключается в способе вставки, потому что мой выход не как ожидалось, когда я запускаю этот код (основной):
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ASCIIDisplayer a = new ASCIIDisplayer();
ListImpl List;
List = new ListImpl();
List.insert("Steve");
List.insert("Kuba");
List.insert("Taylor");
List.insert("Jane");
List.traverse(a);
}
}
Выхода я получаю: Тейлор Джейн Тейлор Джейн Тейлор Джейн Тейлор Джейн. .. повторный.
Я ожидал, что выход будет: Стив Куба Тейлор Джейн Стив Куба Тейлор Джейн ... повторил.
Вот почему я считаю, что проблема в методе вставки, мой указатель должен указывать на неправильные узлы, но я просто не могу понять, что я сделал неправильно.
Извините за длинный вопрос, надеюсь, вам будет достаточно информации, чтобы помочь мне! Спасибо заранее!
Это выглядит как дважды связанный список BTW – Argote
да я забыл указать, спасибо Argote – Cheesegraterr