从链表中删除相同的元素
Remove the same elements from a linked list
我想删除链表中所需的值(int)。例如,{3,1,2,3,3}。我用remove(int 3),那么应该是{1,2}。你能帮我吗,我的代码可以只删除索引0中的3,但我仍然需要删除索引3和4。
public void remove(int value) {
IntegerNode curr = head;
IntegerNode prev = null;
for(curr = head; curr != null; curr = curr.next) {
if(curr.item == value) {
break;
}
prev = curr;
}
if(prev == null) {
head = curr.next;
} else {
prev.next = curr.next;
}
count--;
}
您可以遍历列表并使用以下方法检查项目的可用性。
布尔值包含(对象 o)
然后,如果找到它,则将其删除,因为您已经知道索引。
对象删除(整数索引)
如果元素在列表中,方法 boolean remove(Object)
returns 为真。你可以做类似的事情(故意以未压缩的形式):
boolean condition = true;
while(condition){
condition = list.remove(3);
}
该条件将确保删除列表中的每个不需要的元素。注意方法,我不知道具体的优先级,但是还有 E remove(int i)
可能会导致你删除第 i 个位置的元素而不是想要的元素。如上所述,将值分配给布尔值可以消除歧义,但在另一种情况下使用:
list.remove(new Integer(3));
这将像这个问题中突出显示的那样工作:
Properly removing an Integer from a List<Integer>
你的代码很好,但是你忘了检查所有元素,因为在 for 循环中,当找到第一个元素 3 时会进入 break,所以它不会检查其余的 3s 元素。试试这个代码,当你发现这个元素时你也不需要 break 删除它并转到下一个:
PS : 每次删除过程后你需要最小化它的计数变量,在你的代码中它只会被执行一次。
public void remove(int value) {
IntegerNode curr = head;
IntegerNode prev = null;
for (curr = head; curr != null; curr = curr.next) {
if(curr.item == value) {
if (prev == null) {
head = curr.next;
} else {
prev.next = curr.next;
}
count--;
}
prev = curr;
}
}
只有一行:
while(list.remove(new Integer(3))){}
Upd. 我不知道为什么 smbd 对我和其他正确答案投反对票。只需使用下一个代码对其进行测试(确定):
LinkedList<Integer> list =new LinkedList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(3);
list.add(2);
System.out.println(list);
while(list.remove(new Integer(3))){}
System.out.println(list);
结果:
[1, 2, 3, 3, 3, 2]
[1, 2, 2]
我想删除链表中所需的值(int)。例如,{3,1,2,3,3}。我用remove(int 3),那么应该是{1,2}。你能帮我吗,我的代码可以只删除索引0中的3,但我仍然需要删除索引3和4。
public void remove(int value) {
IntegerNode curr = head;
IntegerNode prev = null;
for(curr = head; curr != null; curr = curr.next) {
if(curr.item == value) {
break;
}
prev = curr;
}
if(prev == null) {
head = curr.next;
} else {
prev.next = curr.next;
}
count--;
}
您可以遍历列表并使用以下方法检查项目的可用性。
布尔值包含(对象 o)
然后,如果找到它,则将其删除,因为您已经知道索引。
对象删除(整数索引)
如果元素在列表中,方法 boolean remove(Object)
returns 为真。你可以做类似的事情(故意以未压缩的形式):
boolean condition = true;
while(condition){
condition = list.remove(3);
}
该条件将确保删除列表中的每个不需要的元素。注意方法,我不知道具体的优先级,但是还有 E remove(int i)
可能会导致你删除第 i 个位置的元素而不是想要的元素。如上所述,将值分配给布尔值可以消除歧义,但在另一种情况下使用:
list.remove(new Integer(3));
这将像这个问题中突出显示的那样工作: Properly removing an Integer from a List<Integer>
你的代码很好,但是你忘了检查所有元素,因为在 for 循环中,当找到第一个元素 3 时会进入 break,所以它不会检查其余的 3s 元素。试试这个代码,当你发现这个元素时你也不需要 break 删除它并转到下一个:
PS : 每次删除过程后你需要最小化它的计数变量,在你的代码中它只会被执行一次。
public void remove(int value) {
IntegerNode curr = head;
IntegerNode prev = null;
for (curr = head; curr != null; curr = curr.next) {
if(curr.item == value) {
if (prev == null) {
head = curr.next;
} else {
prev.next = curr.next;
}
count--;
}
prev = curr;
}
}
只有一行:
while(list.remove(new Integer(3))){}
Upd. 我不知道为什么 smbd 对我和其他正确答案投反对票。只需使用下一个代码对其进行测试(确定):
LinkedList<Integer> list =new LinkedList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(3);
list.add(2);
System.out.println(list);
while(list.remove(new Integer(3))){}
System.out.println(list);
结果:
[1, 2, 3, 3, 3, 2]
[1, 2, 2]