在 Java 中制作链表



我通过使用for循环逐个扫描元素来在链表中添加元素,但是最后在打印列表时出现了0。最后一个节点指向 null,但列表仍然有一个元素为 0。我在下面提供我的源代码,然后输入

import java.util.Scanner;
import static java.lang.System.out;
class Node{
int data;
Node next;
Node(){
this.next=null; 
}
Node(int data){
this.data=data;
this.next=null;
}
}
public class MyClass{
public static void main(String args[]) {
Node head=new Node();
Node temp=head;
Scanner sc = new Scanner(System.in);
int size=sc.nextInt();
for(int i=1;i<=size;i++){
temp.data=sc.nextInt();
temp.next=new Node();
temp=temp.next;
}
temp=null;
while(head!=null){
out.print(head.data+" ");
head=head.next;
}
}
}

输入: 5 1 2 3 4 5

链表最后一个节点中的next指针应为 null,以表示它是最后一个节点。

在您的情况下,您将其保留为"不为空"。在for循环中,如果next指针是您正在读取的最后一个元素,则不要实例化它。

for(int i=1;i<=size;i++){
temp.data=sc.nextInt();
if(i != size) {
temp.next=new Node();
temp=temp.next;
}
}

问题是,即使您在退出循环后设置 temp=null,您仍然有一个额外的未分配节点。

最简单的解决方法是删除 for 循环中的"="符号,以便在最后一个节点之后退出循环,然后分配最终值,如下所示:

for(int i=1;i<size;i++){
temp.data=sc.nextInt();
temp.next=new Node();
temp=temp.next;
}
temp.data=sc.nextInt();

您将在循环外部创建头节点,并在循环中创建新节点。
因此,您将获得 1 个额外的节点。

您可以尝试以下操作:

public static void main(String args[]) {
Node head=null;
Node last=null;
Scanner sc = new Scanner(System.in);
int size=sc.nextInt();
for(int i=1;i<=size;i++){
if (head == null){
head = new Node();
last = head;
} else {
last.next = new Node();
last = last.next();
}
last.data=sc.nextInt();
}
while(head!=null){
out.print(head.data+" ");
head=head.next;
}
}

最新更新