没有尾部字段的LinkedList陷入无限循环

时间:2015-10-03 17:14:24

标签: java while-loop linked-list nodes do-while

如果我想在没有尾部字段的情况下实现它,我的LinkedList add方法有什么问题?

public class LinkedList<E> {
    private Node<E> head= new Node<E>();
    private int size=0;
    public void linkedList(){
        head=null;
        size=0;
    }
    public void add(E data){
        Node<E> currNode=head;
        while (currNode.hasNext()){
            currNode.setNext(currNode.getNext());
        }
        Node<E> lastNode= new Node<E>();
        lastNode.setItem(data);
        lastNode.setNext(null);
        currNode.setNext(lastNode);
        size++;
    }

    public void remove(int i){
        Node<E> currNode = head;
        int index=0;
        while (index<i){
            currNode.setNext(currNode.getNext());
            i++;
        }
        currNode.setNext(currNode.getNext().getNext());

    }

    public void print(){
        Node<E> currNode = new Node<E>();
        do{
            System.out.println(currNode.getItem());

        } while (!currNode.hasNext());
    }


    public static void main(String arc[]){
        LinkedList<String> ll = new LinkedList<String>();
        ll.add("9");
        ll.add("b");
        ll.add("987");
        ll.print();
        return;
    }

}

这是Node类:

public class Node<E> {
    private E item;
    private Node<E> next;


    public Node<E> getNext(){
        return this.next;
    }
    public void setNext(Node<E> n){
        this.next=n;
    }

    public E getItem(){
        return this.item;
    }

    public void setItem(E item){
        this.item=item;
    }

    public boolean hasNext(){
        return (this.next != null);
    }
}

编辑:将打印方法更改为: public void print(){         Node currNode = head;

    while (currNode.hasNext()){
        System.out.println(currNode.getItem());
        currNode=currNode.getNext();
    } 
}

我得到了这个结果:

null
9
b

2 个答案:

答案 0 :(得分:3)

add方法中,您的意思是:

currNode = currNode.getNext();

而不是:

currNode.setNext(currNode.getNext());

?因为最后一个没有效果,你正在进行无限循环......

答案 1 :(得分:1)

此块永远不会结束

while (currNode.hasNext()) {
    currNode.setNext(currNode.getNext());
}

如此无限循环。

确保将currNode移动到前方,通过在while循环中添加crrNode.next()来到达循环结束。