java链表。这个程序不打印8.为什么?

时间:2016-11-27 09:57:15

标签: java data-structures linked-list singly-linked-list

单链表。

  1. 我创建节点
  2. 添加新节点
  3. 实现:

    //create node
    class Node {
      int data;
      Node next;
    
      Node(int data) {
        this.data = data;
        next = null;
      }
    }
    public class LinkedList {
    
      //Add new node
      public static void add(Node root, int data){
        Node temp;
        while (root != null) {
          root = root.next;
        }
        temp = new Node(data);
        root = temp;
      }
      //print node
      public static void print(Node root){
        while (root != null) {
          System.out.println(root.data);
          root = root.next;
        }
      }
    
      public static void main(String[] args) {
        Node root ;
        Node iter;
        root = new Node(7);
        iter = root;
        add(iter, 8);
        print(iter);
      }
    
    }
    

    我工作数据结构。我想链接列表,但程序失败。这个节目不打印8.为什么?

    我在哪里犯错误?

1 个答案:

答案 0 :(得分:2)

while(root!=null){
   root=root.next;
}
 temp=new Node(data);
 root=temp;

此处:root一次只有NULL。 在循环之后,您不必在链的最后一个元素处分配下一个元素。您不会在链中执行任何操作,因为root指向NULL值,并且没有引用链中的元素。
此外,为方法参数赋值是没有意义的,因为当方法退出时不会考虑它。

如果要在节点链的末尾添加节点,则应将代码替换为:

while(root.next !=null){
   root=root.next;
}
temp=new Node(data);
root.next=temp;

你可以写出更有意义的名字:

Node lastElement = root;
while(lastElement.next !=null){
   lastElement=lastElement.next;
}
temp=new Node(data);
lastElement.next=temp;

无论如何,一个更简单的解决方案是在你的类中有一个存储链的最后一个节点的字段。迭代所有元素以在末尾添加元素效率不高。