Почему мой метод add () в LinkedList не работает? - PullRequest
0 голосов
/ 09 октября 2018

Я просто реализую add() метод в моем Linkedlist, но он на самом деле не работает.Я думаю "текущий = новый узел (node.data);"заставляет объект указывать на новый объект вместо обновления исходного, но я не знаю, как его решить.Можно ли как-то правильно обновить этот узел?Пожалуйста, помогите, спасибо.

class Node{
    int data;
    Node next; 
    Node(int data){
        this.data = data;
        this.next = null;
    }
    Node(int data, Node next){
        this.data = data;
        this.next = next;
    }
}
class LinkedList{
    protected Node head;
    protected int size;
    LinkedList(){};

    void add(int data)
    {
        Node node = new Node(data);
        if (head == null) {
            head = node;
        }else {
            Node current = head;
            while(current != null) {
                current = current.next;
            }
            current = new Node(node.data);
        }
        size++;
    }
    public int getSize() {
        return size;
    }
    public String toString()
    {
        Node current = head;
        String result = "";
        while(current != null) {    
            result += current.data +"->";
            current = current.next;
        }
        return result;
    }
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы почти у цели.Ваша проблема лежит здесь

while(current != null) {
... }

current = new Node(node.data);

Это создает новый узел, который должен находиться в самом конце вашего списка.Но вы только назначаете новый экземпляр переменной local ..., которая затем теряется, потому что метод заканчивается.

Вместо этого вы должны изменять свой цикл, пока не найдете последнюю запись, которая не равна нулю, так что current.next == null.Чтобы потом просто пойти:

current.next = new Node(node.data);
0 голосов
/ 09 октября 2018

В LinkedList значения добавляются в верхнюю часть, скажем.Это не похоже на добавление в массив.Поэтому, когда вы добавляете новый узел, вместо того, чтобы пытаться добавить его в конец, вы просто добавляете его как новый элемент заголовка.

Это так же просто, как:

public void add(T item) {

    Node<T> next = new Node<>(item, head);
    this.head = next;
    size++;

}

Если вы хотите ограничить свой LinkedList только int, то вы можете заменить T на int.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...