gpt4 book ai didi

java - 为什么我无法添加到链接列表的末尾?

转载 作者:行者123 更新时间:2023-12-01 23:35:29 25 4
gpt4 key购买 nike

我想编写一些练习代码,以便能够添加到链表的末尾,但是下面的代码并没有将元素 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

最佳答案

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

currentNode = newNode;

currentNode.nextNode = newNode;

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

关于java - 为什么我无法添加到链接列表的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com