我想實現刪除功能困惑鏈表刪除
public static boolean delete(Object d, ListElement head){
ListElement p=find(d,head);
if(p.data==null){return false;}
else {
System.out.println("Delete Successfully!");
if(head.data==d){head=head.next;}
else{
while(head.next.data!=d){
head=head.next;
}
head.next=head.next.next;}
return true;}
}
這個功能基本上檢查元素d
是在列表中, - 如果not->return false;
-else檢查是否元素是列表中的第一個元素,如果true
,將頭部更改爲它的next
,
-else遍歷到它前面的列表元素。
問題是,要刪除的元素是第一個元素,例如布爾型s=ListElement.delete(1,d);
我不能使用「head=head.next;
」將新值賦給head。 但是java通過引用傳遞,爲什麼我不能改變它?
//其實我發現我的問題是,我們是否可以改變傳遞給函數的功能 內引用,如:
void fun(dog a){
a=new dog("Po");
}
main()
{dog b=new dog("Jo");fun(b);}
//所以將b是否會改變?
這是一個解決方案。嗯,我試圖避免使用集合來實現我自己的類。基本上,我的問題是我們是否可以改變傳遞給函數內部函數的參考值。 –
我們不能改變「通過參考」,這是根本。而且,我的解決方案不需要使用Collections類。我會改變類型名稱,使其更清晰:) –
Thx!所以我需要在MyLinedList類中添加setHead()函數來重置頭部。只是想知道是否會有更加漂亮的方式將兩種情況(第一種元素)結合在一起。真的很感謝你的回覆 –