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

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

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

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

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

我得到这个结果:

null
9
b

最佳答案

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

currNode = currNode.getNext();

而不是:

currNode.setNext(currNode.getNext());

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

关于java - 没有尾部字段的 LinkedList 陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32925280/

相关文章:

php - mysql 调用上的循环抛出未知的 PDO 异常 'General Error'

php - 计算while循环内的总行数

php - 选择 *,最后(日期时间)

c++ - 链表字符串排序问题

c++ - 错误 C2440 : '<function-style-cast>' : cannot convert from 'LinkedList<int>::Node *' to 'LinkedListIterator<const T>'

java - 在 Java 中实现和修复递归方法

java - 如何获取 Iterable<Student> 集合中事件日期字段中事件日期最高的对象的唯一列表

java - VSCode 不建议和自动完成 java 代码

java - SpringBoot Java Linux

java LinkedList删除给我不同的值