从链接列表中删除相同的元素

时间:2015-10-02 09:20:02

标签: java data-structures linked-list singly-linked-list doubly-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--;
}

4 个答案:

答案 0 :(得分:1)

你的代码很好,但你忘记检查所有元素,因为在for循环中找到第一个元素3将会中断,所以它不会检查其余的3s元素。尝试这个代码,当你发现这个元素删除它并转到下一个时,你也不需要休息:

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;
        }
}

答案 1 :(得分:1)

只需一行:

while(list.remove(new Integer(3))){}

更新。我不知道为什么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]

答案 2 :(得分:-1)

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

boolean contains(Object o)

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

对象删除(int索引)

答案 3 :(得分:-1)

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

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>