使用 "this" 遍历 Java 中的链表



我是一个新手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;
}  

相关内容

  • 没有找到相关文章

最新更新