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

JAVA:我的Linkedlist只是打印我的头元素,没有别的

丁阎宝
2023-03-14

我已经写了我自己的链表,正在从一个文件中读取整数并打印出来。然而,我的名单上只有头条在打印,其他什么都没有。我盯着这个代码看了这么久,觉得自己疯了,有人能帮我吗?

方法,该方法在单独的“files”类中读取由空格分隔的整数文件。此方法将获取下一个整数并将其添加到我的链接列表中。

public void readValues() {
        LinkedList list = new LinkedList();
        while(scan.hasNextInt()) {
            Integer someData = scan.nextInt();
            list.addNode(someData);
        }
        list.printList();

    }

此方法位于我的LinkedList类中,它获取从我的文件类中的readValues方法发送的数据。

public void addNode(Integer someData) {
        myNode = new LinkedNode(someData,null);
        //initialize node if this is first element
        if (head == null) {
            head = myNode;
            size++;
        }
        else if (myNode.getNext() == null) {
            myNode.setNext(myNode);
            size ++;
        }
        else if (myNode.getNext() != null) {
            while(myNode.getNext() != null) {
                myNode = myNode.getNext();
        }

        myNode.setNext(myNode);
        size++;
        }

    }

这个方法也在我的LinkedList类中,它成功地打印了我的列表头,列表头的数据是数字40,后跟---

public void printList() { 
        LinkedNode current = head;
        if (head == null) {
            System.out.print("list is empty");
            return;
        }
        while(current != null) {
            System.out.print(current.getElement());
            System.out.print(" --> ");
            current = current.getNext();
        }

    }

LinkedNode类:

public class LinkedNode {

    Integer data;
    LinkedNode next;

    public LinkedNode(Integer someData, LinkedNode next) {
        this.data = someData;
        this.next = null;
    }

    public int getElement() {
        return data;
    }

    public void setElement(Integer data) {
        this.data = data;
    }

    public LinkedNode getNext() {
        return next;
    }

    public void setNext(LinkedNode next) {
        this.next = next;
    }

    public String toString() {
        return data + "";
    }
}

共有2个答案

郎磊
2023-03-14

问题出在addNode()方法上。在addNode()方法中,首先创建一个名为myNode的新节点。现在,当head为空时,它会将head设置为myode,这就可以了。但是当头不为空的时候,mypoint就不会被添加到列表中。这就是为什么只有第一个元素存在,而其他元素正在消失。

希望这能有所帮助。如果我还能帮上什么忙,请告诉我。编码快乐!

宗烨赫
2023-03-14

您的代码在addNode()方法的if-else条件中有一个小错误,因此您的数据没有添加到列表中。

根本原因

当您将新节点添加到列表中时,

在第一次迭代中

头目前为空,因此如果条件变为真,并且第一个节点被添加(这就是为什么你得到了数据40)。

在后续迭代中

else if条件检查myNode的下一个指针,该指针将始终为null(根据构造函数),因此它的下一个指针指向自身。从此处创建的节点不会成为列表的一部分,因为head的下一个指针从未分配给任何这些节点,并且这些节点也仅指向自身。

解决方案

我对if-else条件做了一些修改:

public void addNode(Integer someData) {
    LinkedNode myNode = new LinkedNode(someData,null);
    //initialize node if this is first element
    if (head == null) {
        head = myNode;
        size++;
    }
    else if (head.getNext() == null) {
        head.setNext(myNode);
        size ++;
    }
    else if (head.getNext() != null) {
        System.out.println("in second else if");
        LinkedNode n = head;
        while(n.getNext() != null) {
            n = n.getNext();
        }
        n.setNext(myNode);
        size++;
    }

}

PS:试着用干运行调试你的代码,这是一个很好的心理锻炼,也有助于显著提高学习曲线。祝你一切顺利!:)

 类似资料:
  • 我有几个问题。我正在做家庭作业,但遇到了一些令人困惑的事情。(我上的是入门课,有错误,很抱歉。) 实现一个以整数数组和int x作为其大小的类。在类中创建一个方法,该方法创建一个长度比数据长度大1的新数组。然后创建一个方法,将所有数据元素复制到新数组中,并将x值添加到数组的最后一个元素中。创建一个方法来返回新数组中的所有整数。 这是我的 这只是返回NULL。 我的问题是上面任务的最后一点。“创建一

  • 我正在尝试实现一个带有头和尾引用的单链表。为了测试我的脚本,我创建了一个toString()方法,它能够打印出列表中的每个节点。但是,每次调用该方法时,我似乎都进入了一个无限循环,我似乎无法弄清楚为什么。有人能给我一些关于这一点的见解吗?请参阅下面的SinglyLinkedList.java文件。 这是我的SingleLinkedListNode。java文件。

  • 当我使用System.out.println静态方法时,下面的Java程序显示ArrayList中的所有元素。但是,当我在方法中返回列表时,它只显示ArrayList中的一个元素。我希望你能给我一些指点,让我知道你做错了什么:

  • 并且(您刚才看到的是演示的一部分,下面是类的部分内容) 我真的不知道为什么它不打印字符串的东西:(所有的类(稍后将删除) }

  • 在Java的LinkedList中,peek和element有什么区别? 以下是OracleJava文档页面对它们的描述,但它们没有解释区别。 公共E peek() 检索但不删除此列表的头(第一个元素)。 指定者:界面中的peek Deque public E element() 检索但不删除列表的头部(第一个元素)。指定者:接口队列中的元素 区别仅仅是一个抛出异常,而另一个在列表为空的情况下返回

  • 我有困难的逻辑,我有6个数字在我的arraylist和我想打印每2个元素,然后去下一个元素2。喜欢打印1,2然后3,4然后5,6。