我是一个新手Java程序员,需要帮助在遍历Java链接列表与"最少的代码"。
我读了以前的遍历讨论,看到一些人是如何使用引用变量指向列表,然后使用next()遍历的。
我的问题是-可以遍历列表而不使用引用变量吗?换句话说,我可以使用this.next()遍历它吗?下面的count()方法不起作用(进入无限循环)。感谢你帮助澄清我的误解。提前谢谢。
public class Node {
private Object myItem;
private Node myNext;
public Node(Object item, Node next) {
myItem = item;
myNext = next;
}
public Node(Object item) {
this(item, null);
}
public Object item() {
return myItem;
}
public Node next() {
return myNext;
}
public int count(){
int ctr=0;
while (this!=null){
this.next();
ctr++;
}
return ctr;
}
public static void main(String[] args) {
Node myList = new Node("a", (new Node("b", (new Node("c",null)))));
System.out.println("Count: "+myList.count());
}
}
可以使用
public int count(){
int ctr = 1;
if( this.next() != null ){
ctr += this.next().count();
}
return ctr;
}
这是"不使用引用变量"
您的this.next()
方法(不像Iterator
中的next()
方法)不会改变对象的状态。它只是返回一个你没有使用的值。这就是为什么你有一个无限循环(因为this
不会改变,所以它永远不会为空)。
必须使用返回值:
public int count(){
int ctr=0;
Node node = this;
while (node!=null){
node = node.next();
ctr++;
}
return ctr;
}