在LinkedList的尾部插入时出现错误



试图在单链表的末尾插入,但我在输出中发现了一些错误。这是我的代码:

    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。

希望这能有所帮助。

相关内容

  • 没有找到相关文章