gpt4 book ai didi

c# - 从链表中删除 C#

转载 作者:太空狗 更新时间:2023-10-29 20:46:13 25 4
gpt4 key购买 nike

我正在尝试删除一个节点,如果 x 当前与我的链表中的一个 int 匹配。

我试过了,但是一旦它删除了节点,它就会在检查 foreach 循环时抛出错误

public void DeleteNode(int x, LinkedList<name> myLinkedList) {
foreach (name item in myLinkedList) {
if (item.num.equals(x)) mylinkedList.Remove(x);
}
}

希望这是有道理的。

最佳答案

是的,您不能在遍历集合的同时修改它。然而,LinkedList<T>让您可以非常轻松地明确地进行迭代:

public void DeleteNode(int x, LinkedList<name> myLinkedList) {
var node = myLinkedList.First;
while (node != null) {
var nextNode = node.Next;
if (node.Value.num == x) {
myLinkedList.Remove(node);
}
node = nextNode;
}
}

请注意,您不能仅使用 node = node.Next; 就可以逃脱作为最后一行;节点在删除时失效。

这种方法允许在 O(n) 中单次遍历列表,并且可能是您会发现的最有效的方法。它不需要任何复制,也不需要使用移除复杂性较低的集合(比如 List<T>)。

关于c# - 从链表中删除 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com