簡體   English   中英

C#LinkedList添加之后

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

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