我正在尝试删除一个节点,如果x当前与我的链表中的int匹配.
我试过这个,但是一旦它删除了节点,它就会在检查foreach循环时抛出一个错误
public void DeleteNode(int x, LinkedList<name> myLinkedList) {
foreach (name item in myLinkedList) {
if (item.num.equals(x)) mylinkedList.Remove(x);
}
}
Run Code Online (Sandbox Code Playgroud)
希望有道理.
Jon*_*eet 24
是的,您不能迭代集合并同时修改它.但是,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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,node = node.Next;作为最后一行,您无法逃脱; 删除后,节点无效.
这种方法允许在O(n)中单个遍历列表,并且可能是您将找到的最有效的方法.它不需要任何复制,也不需要使用集合(例如List<T>),删除复杂度较低.