[英]How to output the correct linked list when Inserting a node at a specific position in a singly linked list recursively?
[英]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=0
的newNode
相同。 在任何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.