Удаление элементов из LinkedList <> - PullRequest
1 голос
/ 14 мая 2019

У меня есть связанный список, где я храню цены на товары. Я вычислил общую сумму всех предметов, и я хочу проверить, превышает ли общая цена установленный лимит, если я хочу, чтобы удалить предметы, пока это не так.

Так что мой связанный список выглядит так

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 ]

3 голосов
/ 14 мая 2019

Причина в том, что вы используете 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 голос
/ 14 мая 2019

Ошибка из-за while! Вам нужно заменить его на if, потому что после первого цикла больше нет узла.

if (node.Value.FinalPrice > x)
 {
     myLinkedList.Remove(node);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...