Для домашней работы я должен создать круговой связанный список, используя узлы и указатели.
Это мой класс узлов
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);
}
}
Вывод, который я получаю: Тейлор Джейн Тейлор Джейн Тейлор Джейн Тейлор Джейн ... повторил.
Я ожидал, что результатом будет: Стив Куба Тейлор Джейн Стив Куба Тейлор Джейн... повторяется.
Вот почему я думаю, что проблема в методе вставки, мой указатель должен указывать на неправильные узлы, но я просто не могу понять, что я сделал неправильно.
Извините за длинный вопрос, надеюсь, вам хватит информации, чтобы помочь мне!Заранее спасибо!