从“LinkedList”中删除元素



朋友们,我的代码必须从列表中删除某个元素。它必须删除列表中所有的出现项。例如,如果我想删除"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;
                    }
                }
            }
        }
    }

删除元素的循环在第一次匹配时中断。也许下面的方法会更好。当current是匹配时,更新previous。Next但保留previous指向前一个节点,当它不匹配时,更新previous指向当前节点。

while (current != null) {
    if (current.data.equals(number)) previous.next = current.next;
    else previous = current;
    current = current.next;
}

移除break,你的循环在它第一次进入它之后就中断了。

另一点是,它在你的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;
       }
   }

您可以做的是遍历整个循环并检查元素的值是否与搜索值匹配。如果是,那么你可以使用remove这个元素。我不会给出解决方案,但我可以提供算法。

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     
}

你可以做的是创建一个包含你想从LinkedList中删除的所有值的新集合,然后在列表上调用removeAll:

ArrayList<String> numbersToRemove = new ArrayList<String>();
numbersToRemove.add("3");
list.removeAll(numbersToRemove);

这样,如果你以后想要删除多个数字,你可以把它们添加到numbersToRemove。

其他一些答案更简单,更直接,所以如果它们有意义,就使用它们,比如遍历列表并删除与要删除的元素匹配的任何元素。这样做的唯一问题是,如果您在使用object: list语法迭代列表时修改列表,您将获得ConcurrentModificationException,并且如果您使用索引迭代它,可能会获得索引超出范围异常,因此您可能需要做这样的事情:

while (list.contains("3")) {
    ll.remove("3");
}

相关内容

  • 没有找到相关文章

最新更新