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

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

单链表。

  1. 我创建节点
  2. 添加新节点

实现:

//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.为什么?

我哪里出错了?

最佳答案

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

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

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

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;

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

关于java链表。这个程序不打印8.为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827659/

相关文章:

java - Java中包私有(private)类的改进

java - JVM 中老年代空间利用率

C 将 void* 数据转换为 typedef 结构

java - 这段代码有什么问题(简单链表)

java - 转换原始数据类型

java - 为什么我的依赖 Spring bean 被实例化了两次?一次来自 jar 依赖项,一次来自类路径

c++ - 实现八叉树

javascript - 使用javascript实现哈希表

c - 通缉 : Very Fast Linked Lists in C

c - 哪个更好地存储 ANSI C 链表?通过使用 *head 或通过使用其他结构?