Как я могу добавить элемент в конец связанного списка?

#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);  

В данный момент у вас бесконечный цикл