当前位置: 首页 > 知识库问答 >
问题:

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

邵毅
2023-03-14

如果我想在没有尾字段的情况下实现我的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个答案

谷梁楷
2023-03-14

这堵路永远不会结束

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

所以无限循环

确保将currNode向前移动,通过在while循环中添加CRRNode.Next()来到达循环结尾。

毕浩渺
2023-03-14

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

currNode = currNode.getNext();

而不是:

currNode.setNext(currNode.getNext());

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

 类似资料:
  • 问题内容: 我是AngularJS的新手,我正在构建一个示例应用程序。我想在网页上显示Google Maps响应的结果。在这里,我传递了示例值,但是页面进入循环并给出此错误: 这是HTML页面: 问题答案: 在插值内调用函数时,请务必小心。插值会在 每个摘要循环中 运行,并且您在其中调用一个函数,一切都很好,但是随后在该函数中进行一次调用,该调用再次 触发摘要循环(在解析/拒绝和每个promise

  • 问题内容: 我用Java 8编写了一个服务器应用程序,并使用Java 1.8.0u25运行它。 它可以在最初的几个小时内正常工作,但是在收到大约5k至10k请求之后,VM进程的线程使用了其中一个CPU的100%。 因此,我尝试让VM进程检查有问题的线程是什么,它显示线程(线程ID为14303 = 0x37df)为“ C2 CompilerThread0”: 使用,线程的堆栈跟踪如下: 每一次我尝试

  • 给定一棵树,其中左和右子树是min堆,但根节点不维护min堆属性。您的代码应该修改根植于node*n的树,使其成为一个最小堆。(这意味着您需要满足min heap属性:节点的值等于它的一个子节点或两个子节点都是可以的,但节点的值不能大于它的任何一个子节点。您不必试图平衡树或使其成为完整的树。) 请建议我缺少什么。我觉得我把它弄得太复杂了。此外,我没有任何其他函数,如swap将二叉树转换为堆MIN。

  • 我一直在尝试用C语言实现带有队列的二叉树,我对这种语言相当陌生。我一直在尝试调试我用C编写的代码,从头开始编写代码,但没有结果。我看不出我做错了什么。 我检查了用整数数据编写的队列代码,它运行得很好。 enqueue 函数推送队列中的元素 取消排队函数从队列中弹出元素 空 函数检查队列是否为空 然后我实现了二叉搜索树,并在节点中打印了元素 和

  • 我知道Android模拟器有很多问题,StackOverflow几乎溢出了关于它的问题。我知道,我已经经历了其中的大多数,为我的问题寻找答案:) 我有通常的HAXM问题时,我开始,但我修复了VT设置在我的BIOS和我重新安装了HAXM。 android_sdk_home=C:\users\maffe 仿真器:设备FD:1160 HAXM正在工作,仿真程序在快速virt模式下运行 01-22 05:

  • 我正在创建一个应用程序(不在play store中),它在Webview中使用了大量内存,通过使用LeakCanary,我发现了一个修复了几个小内存泄漏的问题。有两个漏洞比其他漏洞更难修复,但也比任何其他漏洞小得多(每两个小时泄漏10-12kb),我不得不暂时保留它们。在让我的应用程序运行一整晚后,我通常会看到大量的日志,比如: 背景部分并发标记扫描GC释放263432(17MB)AllocSpa