java - 这是 LinkedList 的正确可视化吗?
问题描述
我目前正在研究 Linked List,我在 stackoverflow、geeksforgeeks 中查看了一些问题,我只想澄清我的理解是否正确。在我展示我的可视化之后,我还有几个问题。
下面是一个简单的java程序来介绍链表
public class LinkedList {
Node head;
public static void main (String [] args){
LinkedList list = new LinkedList();
list.head = new Node(1);
Node second = new Node(2);
Node third = new Node(3);
list.head.next = second;
second.next = third;
}
}
class Node{
int data;
Node next;
Node(int d){
data = d;
next = null;
}
}
这将创建一个 LinkedList (1,2,3)
据我了解,这里是创建 LinkedList 的步骤,如果我错了,请纠正我
- 你有 2 类是
class LinkedList
和class Node
- 在里面
class LinkedList
我声明了一个可以稍后使用的对象,它是Node head;
- 里面
class Node
是一个对象的另一个声明,它是Node next;
一个将接受数据的构造函数(我创建了一组节点) - 回去
class LinkedList
我实例化一个object list
将成为节点的容器,所以它就像一个class Node
内部对象的对象class LinkedList
我的问题是:
- 为什么我不能只创建头部
Node head = new Node(1);
而不是Node head;
据我了解,对象
list
被创建为对象的容器class Node
,对吗?最后,为什么我必须
Node next;
在 Node 构造函数中声明,为什么我必须设置为next = null;
?
解决方案
您似乎对创建头部 (
new Node(1)
)、分配头部 (=
运算符) 和声明头部 () 的想法感到困惑Node head;
。你的类定义只需要声明这个实例变量,构造函数处理这个对象的创建和赋值。类的目的
Node
是包含值和到下一个对象的链接。因此,没有理由将您的LinkedList
类视为Node
该列表中所有对象的容器,就像对待其他列表类型一样。next = null;
是不必要的,因为null
它是实例变量的默认值。
推荐阅读
- ios - 从通知负载中获取 URL 并将其设置为 Swift 5 中 WKWebView 的 URLRequest url
- html - 如何使边框居中
- python - 拼音的所有 Python 排列组合(普通话罗马化)
- php - Laravel 8 - 可信代理。在“fideloper/TrustedProxy”和“TrustProxies 中间件”之间感到困惑
- cordova - 获取 android 的本机目标时出错:未找到有效的 Android SDK 根目录
- pyspark - 使用点或括号表示法选择时列的空值,但在使用 UDF 时不
- javascript - 使用 axios 通过 promise .then 表示法传递数据
- android - 如何在android的BottomAppBar中添加文本
- c# - 使用 jquery 对话框删除 gridview 行
- google-play-console - 尝试在新的 Google Play 控制台上将分阶段部署更新到 100.0 时出现错误代码 7B73D32B