没有尾字段的链表陷入无限循环

LinkedList without tail field gets stuck in infinite loop

如果我想在没有尾字段的情况下实现它,我的 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 class:

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无效打印(){ 节点 currNode = head;

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

我得到了这个结果:

null
9
b

在您的 add 方法中,您的意思是:

currNode = currNode.getNext();

而不是:

currNode.setNext(currNode.getNext());

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

这个区块永远不会结束

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

如此无限循环。

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