从LinkedList <>中删除项目

时间:2019-05-14 10:03:41

标签: c# linked-list

我有一个链接列表,我在其中存储项目价格。我计算了所有物品的总和,我想检查总价格是否超过设定的限制,如果确实要移除直到不超过。

所以我的链表看起来像这样

Name of item: Automobilis     |Amount of said item available: 1     | Amount needed: 1     | Total price of item/s: 3000
Name of item: Kirvis          |Amount of said item available: 50    | Amount needed: 2     | Total price of item/s: 200 
Name of item: Piesiniai       |Amount of said item available: 1     | Amount needed: 1     | Total price of item/s: 1800

 Total price of all items is: 5000

如果我设定的限制为4000,我要删除项目,直到小于该限制为止。

我正在使用此方法删除节点

static void DeleteNode(double x, LinkedList<MatchingItems> myLinkedList)
        {
            var node = myLinkedList.First;
            while (node != null)
            {
                var nextNode = node.Next;
               while (node.Value.FinalPrice > x)
                {
                    myLinkedList.Remove(node);
                }
                node = nextNode;
            }
        }

但是当我尝试运行它时,会引发此错误:

Unhandled Exception: System.InvalidOperationException: The LinkedList node does not belong to current LinkedList.
   at System.Collections.Generic.LinkedList`1.ValidateNode(LinkedListNode`1 node)
   at System.Collections.Generic.LinkedList`1.Remove(LinkedListNode`1 node)

2 个答案:

答案 0 :(得分:3)

原因是您正在使用while检查是否应从LinkedList中删除节点

while (node.Value.FinalPrice > x)
{
    myLinkedList.Remove(node);
}

第一个node.Value.FinalPrice > x,它已从LinkedList中删除,并且循环继续进行,并且它试图一次又一次地删除该节点,但是它不再属于LinkedList。更改为

if (node.Value.FinalPrice > x)
{
    myLinkedList.Remove(node);
}

答案 1 :(得分:1)

错误是由于while !!您需要用if替换它,因为在第一个循环之后不再有节点。

if (node.Value.FinalPrice > x)
 {
     myLinkedList.Remove(node);
 }