使用java在linklist中插入节点

时间:2017-12-28 16:34:01

标签: java data-structures

我是java的初学者。我正在尝试使用java实现简单的链接列表结构。

我编写了以下代码,在链接列表的末尾插入节点。

 public static  Node insert(Node head,int data) {
    if(head == null)
    {
      Node temp = new Node(data);
        head = temp;
        return head;
    }
    else
    {
         Node temp = new Node(data);
    Node current = head;
    while(current != null)
    {
        current = current.next;
    }
    current = temp;
    return head;
    }
}

Node类定义如下

class Node {
int data;
Node next;
Node(int d) {
    data = d;
    next = null;
}
}

类LinkListDemo具有insert(),display()和main()方法,如下所示。

 class LinkListDemo
 {
 public static  Node insert(Node head,int data) {
    if(head == null)
    {
      Node temp = new Node(data);
        head = temp;
        return head;
    }
    else
    {
         Node temp = new Node(data);
    Node current = head;
    while(current != null)
    {
        current = current.next;
    }
    current = temp;
    return head;
    }
}
public static void display(Node head) {
    Node start = head;
    while(start != null) {
        System.out.print(start.data + " ");
        start = start.next;
    }
}

public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    Node head = null;
    int N = sc.nextInt();

    while(N-- > 0) {
        int ele = sc.nextInt();
        head = insert(head,ele);
    }
    display(head);
    sc.close();
}
}

INPUT:4 2 3 4 1

我输入为4(要插入的节点数)2 3 4 1(对应的节点值)

我预计输出为2 3 4 1 但输出只有2。

请帮我纠正错误。提前谢谢。

4 个答案:

答案 0 :(得分:1)

问题出在插入方法的else部分。您正在循环,直到current变为空,然后将新节点temp分配给它。分配对新节点(temp)的引用不会附加(或链接)到列表的末尾。

正确的方法是转到 last 节点,然后链接新节点,即使最后一个节点的下一个点指向新节点。

应该是

while(current.next != null) {
    current = current.next;
}
current.next = temp;

答案 1 :(得分:0)

在insert()的代码中,你应该有

while(current.next != null)
{
    current = current.next;
}

在您的代码中,您当前的变量将始终为null,从而导致您的节点实际上未被插入。此修复使您当前的变量成为列表中的最后一个节点,以便您可以设置最后一个节点指向新节点的指针。

答案 2 :(得分:0)

我使用以下代码插入节点

public void addFirst(int e) {
        if (head == null) {
            head = new LinkListNode(e);
            tail = head;
            size = 1;
        } else {
            LinkListNode nextNode = new LinkListNode(e);
            nextNode.setNext(head);
            head = nextNode;
            size++;
        }
    }

工作正常......

答案 3 :(得分:0)

只需更改一点代码

Node current = head;
while(current.next != null)
{
    current = current.next;
}
current.next= temp;

并返回头