Ведение порядка вставки связанного списка
Так что я делаю связанный список, и в моей вставке мне нужно поддерживать его порядок. Так что, если бы я должен был пройти через связанный список от корня до его следа с этой вставкой ->
Insertion: 1 2 3
Должен вывести ->
Output: 1 2 3
Пока у меня есть этот код ниже. Весь этот код выводит мою вставку в обратном порядке. Так что печатает ->
3
2
1
Я хочу, чтобы программа поддерживала порядок вставки, изменяя мой метод addLast(). Поэтому, когда я печатаю свой связанный список, он получается так же, как я его вставил.
public class LinkedListMeth
{
public static void main(String[] args)
{
FirstLinkedList list = new FirstLinkedList();
list.addLast(1);
list.addLast(2);
list.addLast(3);
list.traverseLast();
}
}
class FirstLinkedList
{
private class Node
{
private Node next;
private int data;
}
private Node last = null;
public void addLast(int d)
{
Node newNode = new Node();
newNode.data = d;
newNode.next = last;
last = newNode;
}
public void traverseLast()
{
Node head = last;
while (head != null)
{
System.out.println(head.data);
head = head.next;
}
}
2 ответа
Вы должны держать корень вашего связанного списка для обхода в порядке вставки.
Вот отредактированная версия вашего кода:
class FirstLinkedList {
private class Node {
private Node next;
private int data;
}
private Node root = null;
private Node last = null;
public void addLast(int d) {
Node node = new Node();
node.data = d;
if (root == null) {
root = node;
root.next = last;
last = root;
} else {
last.next = node;
last = last.next;
}
}
public void traverseLast() {
Node head = root;
while (head != null) {
System.out.println(head.data);
head = head.next;
}
}
}
Выход:
1
2
3
Если вы хотите придерживаться своего точного текущего дизайна, то одним из вариантов печати списка в порядке начала и конца будет использование рекурсии, что-то вроде этого:
public void printFirstLinkedList(Node node) {
if (node == null) return;
printFirstLinkedList(node.next);
System.out.print(node.data + " ");
return;
}
printFirstLinkedList(yourList.last);