我有一个链接列表,我在其中存储项目价格。我计算了所有物品的总和,我想检查总价格是否超过设定的限制,如果确实要移除直到不超过。
所以我的链表看起来像这样
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)
答案 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);
}