我想实现删除功能困惑链表删除
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()函数来重置头部。只是想知道是否会有更加漂亮的方式将两种情况(第一种元素)结合在一起。真的很感谢你的回复 –