C# LinkedList AddAfter



我正在尝试在下面的代码中使用 C# 实现插入排序。但它给了我一个错误:

"链接列表

"节点已属于"链接列表"

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)需要 2 件事,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(因为它们是相同的),因此您会收到它不在列表中的错误......您不能在列表中未列出的内容之后添加内容。

编辑 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
)

相关内容

  • 没有找到相关文章

最新更新