簡體   English   中英

可以在單個鏈接列表的任何位置遞歸添加節點嗎?

[英]Will adding a Node recursively work in any position of a Singly Linked List?

我了解到,將節點添加到單鏈接列表的前面,代碼是

head = new Node(data,head);

我對邏輯是否感到困惑感到困惑,例如,是否可以在列表中間的某個隨機索引中使用它。 我嘗試實現代碼:

 public void add(int index, int data) {
        if(index == 0) {
            head = new Node(data,head);
        } else {
            for(int pos = 0; pos < size; pos++) {
                if(pos == index) {
                        //Add it//
                        head = new Node(data,head);
                        size++;
                    } else {
                        //Go to the next Node//
                        head = head.getNext();
                    }
                }
            }
        }
    } 

我仍然對這種邏輯感到困惑,因為我覺得這樣做會導致添加完成后的鏈表丟失數據。 因此,例如,如果我添加索引5,則6、7、8、9等將不再是鏈接列表的一部分。

您應該更清楚單鏈列表的工作方式。 我建議您閱讀一些不錯的文章或視頻教程。 在這里您要做的是iteration ,而不是recursion

head是指向鏈表開頭的節點的指針/引用。

那么,什么時候換head

當您在第0th節點插入一個新節點時(假設您是從0開始)或刪除第一個節點時。

在其他情況下, head保持不變。 添加到鏈表的最前面與添加index=0newNode相同。 在任何index處添加newNode的邏輯應該相同。 但是,如果添加到第0th索引,則應將head重置為newNode

您的代碼似乎有缺陷。 進行輸入並嘗試逐步進行。 如果有的話,它可能會幫助您確定缺陷。 干杯。

要將一個節點添加到鏈接列表的開頭,該行將起作用,假設您的構造函數中具有以下內容:

setNext(head);

這樣,您就不會丟失列表。 如果您只是簡單地重設頭而沒有設置對其余列表的引用,那么您將丟失它。

但是,您的索引5示例不適用於此處。 在這種情況下,您是在鏈接列表的中間而不是在開頭插入一個節點,因此過程將有所不同。 例如,如果要在位置5插入某些內容,則必須將位置4的下一個節點設置為新節點,將節點5的新節點設置為當前位於位置5的節點。說明: http : //www.mycstutorials.com/articles/data_structures/linkedlists

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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