[英]C# LinkedList AddAfter
我正在嘗試在下面的代碼中使用C#實現插入排序。 但是它給我的錯誤是:
LinkedList節點已經屬於LinkedList
public void Sort(ref LinkedList<int> list)
{
LinkedListNode<int> tempNode = new LinkedListNode<int>(0); //Contains zero just for initalization
for(tempNode = list.First; tempNode!=null; tempNode=tempNode.Next)
{
LinkedListNode<int> sortedListBoundary = tempNode; //Contains zero just for initalization
while (sortedListBoundary.Value < sortedListBoundary.Next.Value && sortedListBoundary.Previous!=null)
{
sortedListBoundary = sortedListBoundary.Previous;
}
list.AddAfter(tempNode, sortedListBoundary); //This line gives error
}
}
我什至嘗試過臨時使用該節點。 刪除現有的節點(sortedListBoundary),然后調用AddAfter(),但這一次錯誤是:
節點不屬於LinkedList()
那么如何克服這種僵局呢? 提前致謝
AddAfter(node, newNode)
需要兩件事, node
必須屬於列表,而newNode
不能屬於列表,這一切都很好,並且刪除sortedListBoundary
並將其添加到tempNode
之后,如果不滿足以下條件,則可以:
初始化(在for循環中) tempNode = list.First
,然后是LinkedListNode<int> sortedListBoundary = tempNode;
所以現在sortedListBoundary = tempNode = list.First
和sortedListBoundary.Previous == null
因為它是第一個,因此您無需輸入if。 因此,當您到達AddAfter
部分時, sortedListBoundary = tempNode
...您正在嘗試在自身之后添加一個節點...
編輯:只是為了澄清一下,當您刪除sortedListBoundary
,因為sortedListBoundary = tempNode
您也tempNode
刪除了tempNode
(因為它們是相同的),所以您得到的錯誤是它不在列表中……您不能在之后添加任何東西不在列表中的內容。
編輯2:您尋求解決方案,我能給出的最佳答案是不要嘗試將節點放置在其自身之后,仔細檢查插入排序算法,並查看您偏離它的地方,這是插入排序的一種實現:
public void Sort(ref LinkedList<int> list)
{
LinkedListNode<int> tempNode;
for(tempNode = list.First.Next; tempNode!=null; tempNode=tempNode.Next)
{
LinkedListNode<int> sortedListBoundary = tempNode.Previous;
list.Remove(tempNode);
while (sortedListBoundary != null && tempNode.Value < sortedListBoundary.Value)
{
sortedListBoundary = sortedListBoundary.Previous;
}
if(sortedListBoundary == null)
list.AddFirst(tempNode);
else
list.AddAfter(sortedListBoundary, tempNode);
}
}
它是最接近您的代碼的代碼,但我不知道您要做什么。
LinkedListNode<int> sortedListBoundary
的類型為LinkedListNode
而tempNode的類型也為LinkedListNode<int>
LinkedList表示:
public LinkedListNode<T> AddAfter(
LinkedListNode<T> node,
T value
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.