为什么我无法添加到链表的末尾?

  • 本文关键字:链表 添加 java linked-list
  • 更新时间 :
  • 英文 :


我想写一些练习代码来添加到链表的末尾,但下面的代码没有将元素 5 添加到链表。它只会将 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

在不起作用的方法中,您需要更改

currentNode = newNode;

currentNode.nextNode = newNode;

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

相关内容

  • 没有找到相关文章

最新更新