java - 链表的动态实现

标签 java linked-list singly-linked-list

class Nodetype
{
  int info;
  Nodetype next;

  Nodetype(int i)
  {
     info=i;
     next=null;
  }
}

我的教科书有这段代码可以动态创建链接列表。 问题是,当程序逐行执行时,它将变量“info”定义为“int”类型,然后将变量“next”定义为 Nodetype。

这里到底发生了什么?

这是否意味着变量“next”将包含 -

  1. 构造函数“节点类型”
  2. 整数信息
  3. 节点类型“next”,其中“next”将再次拥有所有 1,2,3,然后 3 将再次拥有 1,2,3...等等...直到无穷大?

我真的很生气,因为我无法理解它是如何工作的,有人可以轻松解释一下吗?

最佳答案

您的代码很好地遵循了列表的定义:列表为 null 或一个元素后跟一个列表。
在您的情况下,“元素”由 int 值定义,“后跟”部分是 next 变量;在 Java 变量中(当它们不是文字时,如 int 值)实际上是指针,因此虽然它们未初始化,但它们不存储任何有效值,也不指向任何内存区域(即它们的值为 null),因此,当 next 变量保持原样时,您的元素后面不会跟随任何其他元素。要动态地将元素添加到列表中,您需要一个指向最后添加的元素的指针,否则您将无法再次找到它们:

int i = 0;
Nodetype head = new Nodetype(i++);
Nodetype last = new Nodetype(i++);
head.next = last;
while (i<5) {
    Nodetype temp = new Nodetype(i++);
    last.next = temp;
    last = temp;
}
while(head) {
    System.out.println(head.info);
    head = head.next;
}

请注意,在最后几行中,您如何丢失了 head 指针,并且无法恢复列表的起点。使用列表时请记住这一点;)

关于java - 链表的动态实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456158/

相关文章:

java - gradle如何定义jar文件的依赖jar文件?

java - 有没有办法在 Elasticsearch 中连接同一对象之间的属性?

c - 如何使用双指针插入单向链表?

java - 数组和链表: will arrays be able to allocate 300MB in memory if 512 MB is free but 300 MB is not contiguous

c++ - 对 'Inventory::insertEnd(Node*, int)' 的 undefined reference

java - 不知道如何实现仅最后一个节点作为引用的循环链表

java - Android 前台服务通知未显示在状态栏中

Java:局部变量已初始化,仍然出现错误

c - 链接列表未正确链接

python - 如何在Python中创建和清空链表节点?