我想实现一个LinkedList
删除方法,删除任何特定位置的项目,但我最感兴趣的是在这种情况下删除列表开头(第零个位置)的项目。
我的代码适用于n大于零的值,所以我在n == 0时编写了一个if语句,但是直到我搜索到答案才能理解为什么它不起作用,这对我看起来类似于我写。
public class LinkedList<E> extends Node<E>{
public LinkedList(){}
public Node<E> head;
//removes node at n and returns contents of removed node;
public E remove(int n){
Node<E> current = head; T info;
if(n==0){info=current.getInfo();
head=current.getNext();return info;}
}
}
我的初始陈述是head=head.getNext()
,而不是head=current.getNext()
因此我的问题。这两者有什么区别?
他们是等同的,但执行方式不同? 感谢
答案 0 :(得分:2)
如果将head
的值分配给current
(就像在这里一样),它们应该是等效的。因为它们是对象而不是基元,所以将它们分配给另一个使它们都引用同一个对象。因此,调用head.getNext()
和current.getNext()
都应该返回对同一对象的引用。
答案 1 :(得分:0)
head
(this.head
的简写)是object属性,而current
是一个局部变量,只在声明的代码块中可见。
只是重新检索这个值,没有区别,所以如果你真的改变了,那么两个版本都应该有用。
然而,Modifygin是不同的。更改current
时,更改不会反映在块之外,如果功能完成,则current
将被删除。但是,如果更改this.head
,则更改了对象属性y中存储的引用,并且该更改将在函数结束后保留。