[英]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.