簡體   English   中英

從LinkedList中刪除元素

[英]Removing element from `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;
                    }
                }
            }
        }
    }

您刪除元素的循環在第一個匹配項上中斷。 也許以下內容會更好。 如果當前匹配,則更新previous.next,但將先前的指針指向前一個節點;如果不匹配,則更新previous以指向當前節點。

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

刪除break ,您的循環在第一次進入后就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;
       }
   }

您可以做的是遍歷整個循環,並檢查元素的值是否與搜索到的值匹配。 如果是這樣,則可以使用刪除該元素。 我不會給出解決方案,但是我可以為您提供算法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM