试图在单链表的末尾插入,但我在输出中发现了一些错误。这是我的代码:
public class LinkRemove
{
private static final int N = 5;
public static void main(String[] args)
{
Scanner sx = new Scanner(System.in);
Node first = new Node();
Node tail = new Node();
first=tail;
for(int i=0;i<N;i++)
{
Node current = new Node();
if(tail==null)
{
tail.data = sx.nextInt();
}
else
{
current.data = sx.nextInt();
while(tail.link!=null)
tail = tail.link;
tail.link = current;
}
}
for(Node d = first;d.link!=null;d=d.link)
System.out.println(d.data);
}
private static class Node
{
int data;
Node link;
}
}
现在的问题是,当我给出输入时:
2 4 6 8 10
我得到的输出为:
0 2 4 6 8
可能是什么原因造成的?为什么一开始我会得到0
?请给出一个描述性的答案,谢谢!
试试这个
Scanner sx = new Scanner(System.in);
Node first = null;
Node tail = null;
for (int i = 0; i < N; i++)
{
Node current = new Node();
current.data = sx.nextInt();
if (tail == null)
{
first = tail = current;
}
else
{
tail = tail.link = current;
}
}
for(Node d = first; d != null; d = d.link)
System.out.println(d.data);
第一个0来自节点(Node tail = new Node();
)中字段的默认值。实际上,您希望将其设置为null
,而不是new Node()
。first
也是如此。事实上,你为什么不写:
Node tail = null;
Node first = tail;
就像迈克说的,你的终止条件是不正确的。
此外,
if(tail==null)
{
tail.data = sx.nextInt();
}
一点道理都没有。如果代码达到tail.data = ...
,它将是一个NullPointerException。你到底想干什么?
我修改了您的代码一点
public static void main(String[] args) {
Scanner sx = new Scanner(System.in);
Node first = null;
Node tail = null;
for (int i = 0; i < N; i++) {
Node current = new Node();
current.data = sx.nextInt();
if(first == null) {
first = current;
tail = first;
} else {
tail.link = current;
tail = current;
}
}
for (Node d = first; d != null; d = d.link)
System.out.println(d.data);
}
用于设置节点中数据的逻辑不正确。首先,您必须设置第一个节点并设置tail=First
然后,将新节点添加到tail:tail.link=current。
希望这能有所帮助。