[英]Why don't LinkedList's removeAll() and removeFirstOccurrence() remove the node?
我必須編寫這些方法的代碼。 這是一項家庭作業,不得更改方法的參數或編寫其他方法。
contains()和isEmpty()可以正常工作。 removeFirst()和removerLast()也可以很好地工作。
removeFirstOccurence()不會刪除指定元素的第一次出現。 而且removeAll()不會刪除所有指定的元素。
/**
* Removes the first occurrence of the specified element in this list (when
* traversing the list from head to tail). *
* @param value element to be removed from this list, if present
* @return {@code true} if the list contained the specified element
*/
public boolean removeFirstOccurrence(int value) {
if(!contains(value))
return false;
else{
boolean result = false;
Node current = head;
while ((current != null) && !result) {
if (current.value == value){
current=current.next;
size--;
return true;
}
current = current.next;
}
return result;
}
}
/**
* Removes all occurrences of the specified element from this list.
* @param value the element to remove
* @return {@code false} if nothing changed, otherwise {@code true}
*/
public boolean removeAll(int value) {
if(isEmpty())
return false;
else{
boolean result = false;
Node current = head;
while ((current.next != null) && !result) {
if (current.value == value){
current=current.next;
size--;
result=true;
}
current= current.next;
}
return result;
}
}
這是MyLinkedList類的第一部分:
public class MyLinkedList {
private class Node {
private int value;
private Node next;
private Node(int value) {
this.value = value;
this.next = null;
}
@Override
public String toString() {
...
}
}
private Node head;
private int size;
//和方法...
您永遠不會以任何方式改變任何節點
public boolean removeFirstOccurrence(int value) {
//don't do contains(), you are looping over the entire thing anyway doing it again is useless
if(head==null)return false;
if(head.value==value){//does head contain the value
head=head.next;
size--;
return true;
}
Node prev = head;
while ((prev.next != null)) {//actually checking prev.next if it contains the value
if (prev.next.value == value){
prev.next=prev.next.next; //remove link from prev to prev.next
size--;
return true;
}
prev = prev.next;
}
return false;
}
public boolean removeAll(int value) {
if(head==null)return false;
while(head.value==value){//does head contain the value
head=head.next;
size--;
result=true;
}
Node prev=head;
while ((prev.next != null)) {//actually checking prev.next if it contains the value
(prev.next.value == value){
prev.next=prev.next.next; //remove link from prev to prev.next
size--;
result = true;
}else {
prev = prev.next;
}
}
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.