Почему я не могу добавить в конец связанного списка? - PullRequest
0 голосов
/ 08 октября 2019

Я хотел написать некоторый тренировочный код, чтобы можно было добавить его в конец связанного списка, но код ниже не добавляет элементы 5-9 в связанный список. Это добавляет к списку только 0 - 4.

Я настроил способ обхода связанного списка, который устранил проблему, но я все еще не очень ясно понимаю, почему первый фрагмент кода печатался неправильно.

SinglyLinkedList<Integer> sg = new SinglyLinkedList<>();
    System.out.println(sg.searchNode(5));
    for (int i = 0; i < 5; i++) {

      sg.insertAtHead(i);
    }

    for (int i = 5; i < 10; i++) {

      sg.insertAtEnd(i);
    }

    sg.printList();
  }

Код, который не работал:

public void insertAtEnd(T data) {

    if (isEmpty()) {

      insertAtHead(data);
      return;
    }

    Node newNode = new Node();
    newNode.data = data;
    newNode.nextNode = null;

    Node currentNode = headNode;


    while (currentNode != null) {

      currentNode = currentNode.nextNode;
    }

    currentNode = newNode;
    size++;
  }

Код, который работал:

public void insertAtEnd(T data) {

    if (isEmpty()) {

      insertAtHead(data);
      return;
    }

    Node newNode = new Node();
    newNode.data = data;
    newNode.nextNode = null;

    Node currentNode = headNode;

    while (currentNode.nextNode != null) {

      currentNode = currentNode.nextNode;
    }

    currentNode.nextNode = newNode;
    size++;
  }
  • Вывод для правильно работающего кода: 4 -> 3 -> 2 -> 1 -> 0 -> 5 -> 6 -> 7 -> 8 -> 9 -> NULL
  • Вывод неправильного кода: 4 -> 3 -> 2 -> 1 -> 0 -> NULL

1 Ответ

0 голосов
/ 08 октября 2019

В методе, который не работает, вам нужно изменить

currentNode = newNode;

на

currentNode.nextNode = newNode;

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

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