Связанный список, который добавляет, добавляет, удаляет и показывает содержимое — Java

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