从链表中删除相同的元素



我想删除链表中所需的值(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--;
}

你的代码很好,但是你忘了检查所有的元素,因为在for循环中,当第一个元素3被找到时,它会进入break,所以它不会检查其余的3个元素。试试这段代码,当你找到这个元素时,你也不需要break,删除它,然后转到下一个:

PS: count变量你需要在每次删除过程后最小化它,在你的代码中它将只执行一次。

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))){}

请用下一个代码测试它(以确保):

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]

如果元素在列表中,则方法boolean remove(Object)返回true。您可以这样做(故意以未压缩的形式):

boolean condition = true;
while(condition){
     condition = list.remove(3);
}

条件将确保列表中每个不需要的元素都被删除。注意方法,我不知道确切的优先级,但也有E remove(int i)可能导致你删除第I个位置的元素,而不是想要的那个。如上所述,将值赋给布尔值可以消除歧义,但在另一种情况下使用:

list.remove(new Integer(3));

将在这个问题中突出显示:从列表中正确删除Integer

您可以遍历列表并使用下面的方法检查条目的可用性。

boolean contains(Object o)

如果你找到了它,那么你就删除它,因为你已经知道它的索引。

相关内容

  • 没有找到相关文章

最新更新