我已经写了我自己的链表,正在从一个文件中读取整数并打印出来。然而,我的名单上只有头条在打印,其他什么都没有。我盯着这个代码看了这么久,觉得自己疯了,有人能帮我吗?
方法,该方法在单独的“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 + "";
}
}
问题出在addNode()方法上。在addNode()方法中,首先创建一个名为myNode的新节点。现在,当head为空时,它会将head设置为myode,这就可以了。但是当头不为空的时候,mypoint就不会被添加到列表中。这就是为什么只有第一个元素存在,而其他元素正在消失。
希望这能有所帮助。如果我还能帮上什么忙,请告诉我。编码快乐!
您的代码在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。