#java #list #methods #linked-list #nodes
Вопрос:
Я работаю над проектом для своего класса структур данных, в котором меня просят написать класс для реализации связанного списка int.
- Используйте внутренний класс для узла.
- Включите следующие методы.
- Напишите тестер, который позволит вам протестировать все методы с любыми данными, которые вы хотите, в любом порядке.
Я должен создать метод под названием «public void addToBack(int item)». Этот метод предназначен для «Добавления элемента в конец списка», ниже приведен мой код для этого метода. Когда я выполняю этот метод, мой список становится пустым. Кто-нибудь знает, что я сделал не так и как это исправить?
import java.util.Random; import java.util.Scanner; public class LinkedListOfInts { Node head; Node tail; private class Node { int value; Node nextNode; public Node(int value, Node nextNode) { this.value = value; this.nextNode = nextNode; } } public LinkedListOfInts(LinkedListOfInts other) { Node tail = null; for (Node n = other.head; n != null; n = n.nextNode) { if (tail == null) this.head = tail = new Node(n.value, null); else { tail.nextNode = new Node(n.value, null); tail = tail.nextNode; } } } public LinkedListOfInts(int[] other) { Node[] nodes = new Node[other.length]; for (int index = 0; index lt; other.length; index ) { nodes[index] = new Node(other[index], null); if (index gt; 0) { nodes[index - 1].nextNode = nodes[index]; } } head = nodes[0]; } public LinkedListOfInts(int N, int low, int high) { Random random = new Random(); for (int i = 0; i lt; N; i ) this.addToFront(random.nextInt(high - low) low); } public void addToFront(int x) { head = new Node(x, head); } public void addToBack(int x) { if (head == null) { head = new Node(x, head); return; } tail = head; while (tail.nextNode != null) { tail = tail.nextNode; } tail.nextNode = new Node(x, tail); } public String toString() { String result = ""; for (Node ptr = head; ptr != null; ptr = ptr.nextNode) { if (!result.isEmpty()) { result = ", "; } result = ptr.value; } return "[" result "]"; } public static void main(String[] args) { Scanner input = new Scanner(System.in); LinkedListOfInts list = new LinkedListOfInts(10, 1, 20); boolean done = false; while (!done) { System.out.println("1. Add to Back"); System.out.println("2. toString"); switch (input.nextInt()) { case 1: System.out.println("Add an Item to the Back of a List."); list.addToBack(input.nextInt()); break; case 2: System.out.println("toString"); System.out.println(list.toString()); break; } } } }
Ответ №1:
Когда вы добавляете в tail
следующий код, он должен указывать на нуль
tail.nextNode = new Node(x, null);
В данный момент у вас бесконечный цикл