【问题标题】:Anyone know why this method for linked list keeps on going forever?任何人都知道为什么这种链表方法会一直持续下去吗?
【发布时间】:2013-11-17 23:13:47
【问题描述】:

我有这个链表方法,用于在之前插入,所以它需要一个节点并将其放在 beforeNode 之前。目前它会这样做,但它会永远持续下去,并使链表在它应该只有四长的时候变得无限大。有谁知道为什么它会继续运行?

private void insertBefore(Node aNode, Node beforeNode)
    {

        if(this.getPrevious(beforeNode) != null) {
            this.getPrevious(beforeNode).setNext(aNode);
           // aNode.setPrevious(beforeNode);
            //this.getPrevious(this.getPrevious(beforeNode)).setNext(aNode);
        } else {
            head = aNode;
        }
        aNode.setNext(beforeNode);
       // beforeNode.setPrevious(aNode);

    }

这里是打印列表方法,可能与它有关,但我不这么认为

 public void printList()
    {
        Node currentNode;

        currentNode = this.getHead();

        System.out.print("head ->");

        while(currentNode!=null)
        {
            System.out.print(currentNode.getData().toString()+ " -> ");
            currentNode = currentNode.getNext();
        }
        System.out.println("|||");
    }

【问题讨论】:

  • 有什么东西在重复调用它吗? beforeNode 是做什么的?你没有while循环,所以它可以被其他东西递归调用。我也看不到任何可以让它长 4 的东西。
  • 肯定有东西在重复调用 insertBefore。
  • @Jack 我主要使用它 myLinkedList.insertBefore(myNode4, myNode2);
  • 问题不可能是这个方法。没有循环,也没有递归调用。也看看其他方法。
  • 我的猜测是存在某种交互,并且在 insertBefore 中调用的方法之一在某些条件下调用 insertBefore。您是否得到了一个可以跟踪的异常?它只是冻结?有问题的迹象是什么?

标签: java arrays function methods linked-list


【解决方案1】:

我想你是如何为 aNode 和 beforeNode 传递同一个节点的。在java中,每个对象都是一个引用。您是否有机会尝试创建 aNode 的 beforeNode 副本?它可能使两者相同并导致链表具有自循环。使用复制构造函数或克隆之类的东西来获取重复节点。

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多