簡體   English   中英

實現我自己的 LinkedList,向 Tail 中插入新元素無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM