为什么我不能添加到链接列表的末尾?

时间:2019-10-08 01:19:05

标签: java linked-list

我想编写一些练习代码以能够添加到链表的末尾,但是下面的代码并未将元素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 :(得分:0)

在无效的方法中,您需要进行更改

currentNode = newNode;

currentNode.nextNode = newNode;

这样做的原因是currentNode只是对您在链接列表中的位置的引用。更改currentNode的值完全不会影响链接列表。将链接列表想象成白板上的绘图。 currentNode只是指向当前选定节点的箭头。通过更改currentNode的值,您只需将箭头移动到新创建的节点,该节点尚未连接到链表。要将其添加到末尾,您必须从currentNodenewNode绘制一个箭头。