#java #linked-list
#java #связанный список
Вопрос:
Я только начал изучать связанные списки и пытаюсь реализовать свое понимание этого. Однако это не работает, и программа запускается без ошибок.
Программа должна иметь возможность добавлять, вставлять в начале, удалять узел, содержащий определенное значение, и распечатывать содержимое. Программа запускается, но ничего не показывает
public class LinkedListLogic {
private class Node {
Node next;
int data;
public Node(int data) {
this.data = data;
}
}
Node head;
public void addToLastElement(int data) {
if (head == null) {
head = new Node(data);
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
}
public void insertAtBeginning(int data) {
Node newHead = new Node(data);
newHead.next = head;
head = newHead;
}
public void deleteAtSpecificValue(int data) {
if (head == null) {
return;
}
if (head.data == data) {
head = head.next;
}
Node current = head;
while (current.next.data != data) {
current = current.next;
}
current.next = current.next.next;
return;
}
public void printAll() {
for (Node current = head; current.next != null; current = current.next) {
System.out.println(current.data);
}
return;
}
public static void main(String[] args) {
LinkedListLogic a = new LinkedListLogic();
a.addToLastElement(2);
a.addToLastElement(4);
a.printAll();
}
}
Комментарии:
1. Вы прошли через код с помощью отладчика?
2. Одно из наблюдений заключается в том, что вы не добавляете в список
addToLastElement
один разhead
значение, отличное от null.3. Другой заключается в том, что цикл в
printAll
пропускает последний элемент списка.4. На самом деле я раньше не использовал отладчик. Нужно посмотреть видео об этом. Вы абсолютно правы в отношении addToLastElement и printAll —AndyTurner
Ответ №1:
Спасибо Энди Тернеру за указание на ошибки
public class LinkedListLogic {
private class Node {
Node next;
int data;
public Node(int data) {
this.data = data;
}
}
Node head;
public void addToLastElement(int data) {
if (head == null) {
head = new Node(data);
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new Node(data);
}
public void insertAtBeginning(int data) {
Node newHead = new Node(data);
newHead.next = head;
head = newHead;
}
public void deleteAtSpecificValue(int data) {
if (head == null) {
return;
}
if (head.data == data) {
head = head.next;
}
Node current = head;
while (current.next.data != data) {
current = current.next;
}
current.next = current.next.next;
return;
}
public void printAll() {
Node current;
for (current = head; current.next != null; current = current.next) {
System.out.println(current.data);
}
System.out.println(current.data);
return;
}
public static void main(String[] args) {
LinkedListLogic a = new LinkedListLogic();
a.addToLastElement(2);
a.addToLastElement(4);
a.insertAtBeginning(5);
a.deleteAtSpecificValue(2);
a.addToLastElement(9);
a.addToLastElement(9);
a.addToLastElement(9);
a.addToLastElement(9);
a.deleteAtSpecificValue(9);
a.printAll();
}
}
Ответ №2:
public class LinkedListLogic {
private class Node {
Node next;
int data;
public Node(int data) {
this.data = data;
}
}
Node head;
public void addToLastElement(int data) {
if (head == null) {
head = new Node(data);
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new Node(data);
}
public void insertAtBeginning(int data) {
Node newHead = new Node(data);
newHead.next = head;
head = newHead;
}
public void deleteAtSpecificValue(int data) {
if (head == null) {
return;
}
Node current = head;
Node previous = null;
while ( current != null amp;amp; current.data != data) {
previous = current;
current = current.next;
}
if(current != null amp;amp; current.data == data) {
previous.next = current.next;
}
return;
}
public void printAll() {
for (Node current = head; current != null; current = current.next) {
System.out.print(current.data " ");
}
System.out.println();
return;
}
public static void main(String[] args) {
LinkedListLogic a = new LinkedListLogic ();
a.addToLastElement(2);
a.addToLastElement(4);
a.addToLastElement(6);
a.addToLastElement(9);
a.printAll();
a.insertAtBeginning(1);
a.printAll();
a.deleteAtSpecificValue(6);
a.printAll();
a.deleteAtSpecificValue(9);
a.printAll();
}
}