![](/img/trans.png)
[英]my own String to Integer (atoi) function doesn't work correctly
[英]Implementing my own LinkedList, insertion of a new element to the Tail doesn't work correctly
我正在嘗試實現自己的鏈表,並解決了這個問題。
這是linkedlist的 add 方法實現,應該將指定的元素添加到列表的末尾。
在下面您會看到我找到並且有效的代碼,並且您會看到我的代碼僅顯示添加的最后2
元素,無論您向列表中添加了多少元素。
2
代碼的唯一區別是他將rootNode
( head ) 存儲在currentNode
中,並使用currentNode
進行遍歷。 我直接使用rootNode
來做同樣的事情。 有人可以解釋我的代碼有什么問題嗎?
這是他的有效代碼:
public void add (E val) {
Node newNode = new Node(val, null);
Node currentNode = rootNode;
if (rootNode == null) {
rootNode = newNode;
} else {
while (currentNode.nextNode != null) {
currentNode = currentNode.nextNode;
}
currentNode.setNextNode(newNode);
}
}
這是我的代碼,僅顯示添加的最后2
元素:
public void add (E val) {
Node newNode = new Node(val, null);
if (rootNode == null) {
rootNode = newNode;
} else {
while (rootNode.nextNode != null) {
rootNode = rootNode.nextNode;
}
rootNode.setNextNode(newNode);
}
}
發生這種情況是因為您在迭代時退出了rootNode
。
通過這樣做,您將刪除列表的所有先前狀態,您只能通過 root 訪問。 這樣,列表中唯一保留的節點就是根節點及其下一個節點。
為了迭代列表,您應該像第一個版本一樣引入局部變量。 沒有其他辦法了。
我建議通過檢查根是否為null
后返回來簡化方法,將循環嵌套到附加的花括號塊中是沒有的:
public void add (E val) {
Node newNode = new Node(val,null);
if(rootNode == null) {
rootNode = newNode;
return;
}
Node currentNode = rootNode;
while (rootNode.nextNode != null) {
rootNode = rootNode.nextNode;
}
rootNode.setNextNode(newNode);
}
因為你在改變根節點,所以add方法結束后,你只有根節點和它的下一個節點,如果根節點不為空,就不要改變根節點。 比如你對節點A、B、C調用add方法。第一次root是A,那么當你調用add(B)時,由於root節點已經不為空了,else語句中的循環不會起作用A 的下一個將是 B,然后當您調用 add(C) 時,while 循環將進行一次迭代,B 將成為根節點(您丟失了 A),B 的下一個將是 C 節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.