Java 正在从`LinkedList'中删除元素`
各位,我的代码必须从列表中删除某个元素。它必须删除列表中出现的所有事件。例如,如果我想删除Java 正在从`LinkedList'中删除元素`,java,linked-list,nodes,Java,Linked List,Nodes,各位,我的代码必须从列表中删除某个元素。它必须删除列表中出现的所有事件。例如,如果我想删除“3”,输入为: 1 2 3 4 3 5 那么输出应该是: 1 2 4 5 但我的代码仅删除元素的最后一次出现,因为在运行代码时可以看到: 3 4 3 2 1 After removing element 3 4 3 2 1 smb能帮我解决这个问题吗?提前谢谢 public void removeElements(String number){ if(isEmpty(
“3”
,输入为:
1
2
3
4
3
5
那么输出应该是:
1
2
4
5
但我的代码仅删除元素的最后一次出现,因为在运行代码时可以看到:
3
4
3
2
1
After removing element 3
4
3
2
1
smb能帮我解决这个问题吗?提前谢谢
public void removeElements(String number){
if(isEmpty()){
System.out.println("The list is empty!");
}
else{
if(firstLink.data.equals(number)){
firstLink = firstLink.next;
}
else{
Link current = firstLink.next;
Link previous = firstLink;
while(current != null){
if(current.data.equals(number)){
previous.next = current.next;
break;
}
else{
previous = current;
current = current.next;
}
}
}
}
}
移除
中断
,循环第一次进入后即中断
另一点是,它落在if(firstLink.data.equals(number))
中,完全忽略else
块。您不应该在else
中使用该块。应该在外面
if(firstLink.data.equals(number)){
firstLink = firstLink.next;
}
Link current = firstLink.next;
Link previous = firstLink;
while(current != null){
if(current.data.equals(number)){
previous.next = current.next;
} else {
previous = current;
current = current.next;
}
}
您删除元素的循环在第一次匹配时中断。也许像下面这样的方法会更好。当“当前”是匹配项时,更新“上一个”。下一步,但将“上一个”保持指向上一个节点;当“上一个”不是匹配项时,更新“上一个”以指向当前节点
while (current != null) {
if (current.data.equals(number)) previous.next = current.next;
else previous = current;
current = current.next;
}
您可以做的是迭代整个循环,并检查元素的值是否与搜索的值匹配。如果确实如此,则可以使用删除该元素。我不会给出这个问题的解决方案,但我可以为您提供算法
for(int i = 0; i < length of list; i++)
{
if(ith element of the list == value to be removed)
//remove the ith term using .remove(i) method
}
for(int i=0;i
您可以创建一个新集合,其中包含要从LinkedList中删除的所有值,然后调用列表中的removeAll:
ArrayList<String> numbersToRemove = new ArrayList<String>();
numbersToRemove.add("3");
list.removeAll(numbersToRemove);
正如@John Bickers提到的,当它是一个匹配项时,你不应该更新
previous
。实际上,在你的情况下,它处于秒级if条件,而不会阻止else。对不起,@JohnBickers,但是当你说“当当前是一个匹配项时,更新previous.next,但将previous指向上一个节点”时,我真的不明白。我应该如何让previous
指向previous
?@John,这是指if语句为真时发生的情况与if语句为假时发生的情况之间的区别。
while (list.contains("3")) {
ll.remove("3");
}