- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们被分配了从头开始创建 LinkedList 的任务,但绝对没有任何读数可以指导我们完成这个导致偏头痛的任务。此外,网上的一切似乎都只是使用 Java 内置的 LinkedList 方法和东西。无论如何,链表在使用 Java 的默认东西时非常有意义,但从头开始创建它是没有任何意义的。假设我有
public class LinkedList {
private LinkedList next;
private final String word;
// constructor
public LinkedList(String word, LinkedList next) {
this.word = word;
this.next = next;
}
因此神奇地我们有一个链表。到底是怎么回事?我是如何创建这样的链表的?这是如何运作的?我应该编写一个追加方法,将给定的 String word
参数添加到 this
链表的末尾。我尝试查看内置 java 链表类的 addLast 内置方法,但这对我没有帮助,因为我真的不明白发生了什么。有人愿意帮助我:)
最佳答案
如果您实际上是在构建一个真实的系统,那么是的,如果您需要的东西在那里可用,您通常只需使用标准库中的东西。也就是说,不要认为这是一个毫无意义的练习。了解事物的工作原理很好,了解链表是了解更复杂数据结构的重要一步,其中许多数据结构在标准库中不存在。
创建链接列表的方式与 Java 集合 API 的创建方式之间存在一些差异。 Collections API 试图遵循更复杂的接口(interface)。 Collections API 链表也是一个双向链表,而您正在构建一个单链表。你正在做的更适合类作业。
使用您的 LinkedList
类,实例将始终是包含至少一个元素的列表。通过这种设置,您可以在需要空列表时使用 null
。
将 next
视为“列表的其余部分”。事实上,许多类似的实现使用名称“tail”而不是“next”。
这是一个包含 3 个元素的 LinkedList
的图表:
请注意,它是一个 LinkedList
对象,指向一个单词(“Hello”)和一个包含 2 个元素的列表。 2 个元素的列表有一个单词(“Stack”)和一个包含 1 个元素的列表。 1 个元素的列表有一个单词(“溢出”)和一个空列表(null
)。因此,您可以将 next
视为恰好是一个元素较短的另一个列表。
您可能想要添加另一个只接受字符串的构造函数,并设置在 null
旁边。这将用于创建一个 1 元素列表。
要追加,请检查 next
是否为 null
。如果是,则创建一个新的元素列表并将 next
设置为该列表。
next = new LinkedList(word);
如果 next 不是 null
,则改为追加到 next
。
next.append(word);
这是递归方法,代码量最少。您可以将其转换为迭代解决方案,这在 Java* 中会更高效,并且不会冒着列表很长的堆栈溢出的风险,但我猜测不需要那种复杂程度为你的任务。
* 一些语言有尾调用消除,这是一种优化,允许语言实现将“尾调用”(作为返回前的最后一步调用另一个函数)转换为(有效地)“goto” .这使得此类代码完全避免使用堆栈,从而使其更安全(如果不使用堆栈,则不能溢出堆栈)并且通常更高效。 Scheme 可能是具有此功能的语言中最著名的示例。
关于java - 从头开始创建 LinkedList 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066729/
我想添加 LinkedList (我们称之为列表 A)到 LinkedList> (称之为列表 B)。执行此操作后,我需要更改列表 A 的值并将其再次添加到列表 B,但不更改已存储在列表 B 中的值。
更新:感谢所有的回答。我发现的最干净的解决方案是这个: if ( k(Arrays.asList(new LinkedList<>())); 我有一个递归方法,可以从列表中生成所有“n 选 k”组合。
在我的 Java 应用程序中,以下两个都将编译和运行,并产生所需的结果。 //"Rotate" the list items one place to the left. myLinkedList.a
我写了一个LinkedList接受 Nodes 的类存储 Integers . 然后我创建了一个 LinkedList stack = new LinkedList() ,并添加了 Node s 如果
这个问题在这里已经有了答案: What does it mean to "program to an interface"? (33 个答案) 关闭 9 年前。 新手 Java 问题: 谁能解释一下
我有一个问题。我无法并排输出我的 LinkedList。我问了这个问题,但遗憾的是我的老师告诉我不要更改方法头或使用 java 库(如日历)。我得到了很多关于使用它或更改方法头的建议。我是根据年级而定
这里有什么问题?。我正在尝试使用邻接列表,通过利用 util 包中的集合来实现图形数据结构。这里 LinkedList array which holds some integer. Each ele
这个问题已经有答案了: Reversing a linked list in Java, recursively (33 个回答) 已关闭10 年前。 如何使用 linkedList 类中的方法以相反
我需要实现一个 LinkedList,到目前为止,我已经编写了在列表中按顺序插入值的方法。我有我的节点 front 作为我的类的实例数据,当创建我的第一个值并尝试将 front 的 next 值设置为
目前,我的 LinkedList(不是 Java 的)类中有一个方法,可以将单个节点添加到 LinkedList 中,如下所示: public void add(int index, T v) {
我正在编写一个读取 XML 文件的类,该 XML 使用“sax”类进行解析。在我的 XML 文件中,我创建了“for”标签和“宏”,使 for 循环能够写入 XML,例如: Th
我正在处理一个 C++ 作业,我将在一个链表的链表上创建一个搜索引擎。根据要求,我不能使用其他库和 STL。 基本上它会是这样的(我从小列表中删除了变量,因为它们是不相关的): 我的结构是这些: st
老实说,我现在真的很困惑这个问题,并且真的不知道如何解决这个问题。我需要编写一个方法,其中给定一个字符链接列表(例如:{'a','A','d','X'})并返回仅包含大写字符的列表(返回:{'A','
我正在尝试获取可执行文件中的两个链表,并在交替位置将它们合并到一起。前任。 ListOne 1,2,3 和 ListTwo 4,5 新的 ListOne 应该是 1,4,2,5,3。 链表.h文件:
这个问题在这里已经有了答案: Is List a subclass of List? Why are Java generics not implicitly polymorphic? (19 个回答
在尝试了解如何将哈希表插入LinkedLists时,我遇到了麻烦。我失去了尝试过的不同事物的数量。我知道我可以使用ArrayList或其他东西,但是我想使它与LinkedLists一起工作,以便可以对
我一直在尝试编写一种方法,不仅可以从 LinkedList(allUsers) 中删除对象(User),还可以从所有用户拥有的单个 LinkedList 中删除。谁能向我解释为什么这是错误的?我已经包
我有一个列表结构和一个名为树的递归函数。在下面的代码中,它永远不会到达 current == null 语句,因此它将永远运行。 如果我无法使用null,解决方案是什么? private void t
这个问题在这里已经有了答案: How does one add a LinkedList to a LinkedList in C#? (3 个答案) 关闭 9 年前。 假设我有以下内容: Link
我正在尝试为 LinkedList 创建一个反向 ListIterator,并且打算将其实现为 linkedList.listIterator(linkedList. size()) 交换了 next
我是一名优秀的程序员,十分优秀!