从头开始创建 LinkedList 类

2024-03-10

我们的任务是从头开始创建一个 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 linkedlist 类的 addLast 内置方法,但这对我没有帮助,因为我真的不明白发生了什么。任何人都愿意帮助我:)


如果您实际上正在构建一个真实的系统,那么是的,您通常只会使用标准库中的内容(如果您需要的东西在那里可用)。也就是说,不要认为这是一个毫无意义的练习。理解事物的工作原理是件好事,而理解链表是理解更复杂的数据结构的重要一步,其中许多数据结构在标准库中并不存在。

创建链接列表的方式与 Java 集合 API 的方式之间存在一些差异。 Collections API 试图遵循更复杂的接口。当您构建单链表时,Collections API 链表也是双向链表。你正在做的事情更适合课堂作业。

和你的LinkedList类,一个实例将始终是至少一个元素的列表。通过这种设置,您可以使用null当你需要一个空列表时。

考虑到next作为“列表的其余部分”。事实上,许多类似的实现都使用名称“tail”而不是“next”。

这是一个图表LinkedList包含3个元素:

请注意,这是一个LinkedList指向一个单词(“Hello”)的对象和一个包含 2 个元素的列表。 2 个元素的列表有一个单词(“Stack”)和 1 个元素的列表。该 1 个元素的列表有一个单词(“溢出”)和一个空列表(null)。所以你可以治疗next就像另一个列表,恰好短了一个元素。

您可能想添加另一个构造函数,该构造函数只接受一个字符串,并设置为null。这将用于创建一个 1 元素列表。

要附加,您检查是否next is null。如果是,则创建一个新的单元素列表并设置next对此。

next = new LinkedList(word);

如果下一个不是null,然后附加到next反而。

next.append(word);

This is the recursive approach, which is the least amount of code. You can turn that into an iterative solution which would be more efficient in Java*, and wouldn't risk a stack overflow with very long lists, but I'm guessing that level of complexity isn't needed for your assignment.


* Some languages have tail call elimination, which is an optimization that lets the language implementation convert "tail calls" (a call to another function as the very last step before returning) into (effectively) a "goto". This makes such code completely avoid using the stack, which makes it safer (you can't overflow the stack if you don't use the stack) and typically more efficient. Scheme is probably the most well known example of a language with this feature.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从头开始创建 LinkedList 类 的相关文章

  • 不同的 JDK 更新会产生不同的 Java 字节码吗?

    假设场景 我有一个项目 其源合规性级别指定为 1 5 现在 我使用两种不同的 JDK 编译此项目 首先使用 JDK 6 Update 7 然后使用 JDK 6 Update 20 这两个不同的 JDK 是否会生成不同的 Java 字节代码
  • 使用 Spring MVC 返回 PDF 文件

    实际上 我有这个功能 我有一个框架 可以在其中设置 URL ip port birt preview report report rptdesign format pdf parameters 并且该框架呈现 PDF 文件 但我想隐藏该网址
  • java替代Thread.stop()来中断特定调用

    我正在寻找一种方法来告诉这个调用 大约需要 20 120 秒 final Area image final AffineTransform transform new AffineTransform transform scale imag
  • Java,将 null 分配给对象和仅声明之间有什么区别

    之间有什么区别 Object o null and Object o 仅声明 有人可以回答我吗 这取决于您声明变量的范围 例如 局部变量没有default values在这种情况下你将不得不分配null手动 在这种情况下实例变量分配 nul
  • 使用 java 的 RAR 档案 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • DateTimeFormatter.parseLocalDate 抛出 UnsupportedOperationException

    该API用于解析本地日期 http joda time sourceforge net apidocs org joda time format DateTimeFormatter html parseLocalDate 28java la
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • ASM之前看一下maxStack指令吗?

    我正在尝试使用 ASM 库将字节代码转换为不同的格式 这可以使用 MethodVisitor 来完成 就像这个简单的测试代码一样 return new MethodVisitor ASM7 Override public void visi
  • 将 EditText 聚焦在设备上运行的 PopupWindow 中时出现异常

    我正在为 Android 开发一个弹出窗口 它正在工作 我在上面添加了一个 EditText 和一个按钮 当在 ADV 上运行时 它可以正常工作 而在设备上运行时 当我专注于 EditText 时 这会抛出一个奇怪的异常 android v
  • 我们必须将 .class 文件放在 Tomcat 目录中的位置

    我必须把我的 class文件在 Tomcat 目录中 在我的 Java Complete Reference 书中 他们告诉将其放入C Program Files Apache Tomcat 4 0 webapps examples WEB
  • java.lang.IllegalArgumentException:addChild:子名称“/”不唯一

    java lang IllegalArgumentException addChild 子名称 不唯一 通过在 tomcat webapps 文件夹中启用和禁用 saml 单点登录来替换现有 war 文件时遇到此问题 我正在使用 apach
  • activemq 的优先级

    我们目前正在使用 JMS 和 activemq 5 5 1 开发一个应用程序 我们想为某些消息定义更高的优先级 这将使它们首先被消耗 设置生产者和消费者后 通过spring 3 1 JMSTemplate 优先级并不能完全发挥作用 事实上
  • 如何告诉 cxf 将包装类型保留在方法中?

    在我的 WSDL 中我有一个操作
  • Storm Spout 未收到 Ack

    我已经开始使用storm 所以我使用创建简单的拓扑本教程 https github com nathanmarz storm wiki Tutorial 当我运行我的拓扑时LocalCluster一切看起来都很好 我的问题是我没有得到元组的
  • 使用链接列表插入优先级队列的方法

    首先 我觉得我应该提到这是一项作业 我并不是在寻找直接的代码答案 只是为了指出正确的方向 我们被要求在链表中实现优先级队列 我正在努力编写 insert 函数的第一部分 在代码中我尝试检查是否head包含任何内容 如果没有则设置为head
  • Apache Kafka 是否提供异步订阅回调 API?

    我的项目正在将 Apache Kafka 视为老化的基于 JMS 的消息传递方法的潜在替代品 为了让这个过渡尽可能的顺利 如果替代的排队系统 Kafka 有一个异步订阅机制那就更理想了 类似于我们当前项目使用的JMS机制MessageLis
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • Java,如何管理线程读取socket(websocket)?

    我有一个 WebSocket 服务器 我的服务器创建一个新线程来处理新连接 该线程一直处于活动状态 直到 websocket 中断 我的问题 对于 1 000 000 个连接 我需要 1 000 000 个线程 我如何通过一个线程处理多个
  • 线程“main”中出现异常 java.lang.UnsatisfiedLinkError: ... \jzmq.dll: 找不到依赖库

    我有一个使用 ZMQ 的 java 应用程序 我已经能够在我的 Win7 PC 上运行它 我将 jzmq dll 放在 jar 可执行文件所在的同一文件夹中 然后通过命令 java jar myapp jar 运行它 我的下一步是将其移至服

随机推荐

  • $.post() 没有时间运行?

    我试图在提交表单之前将数据从表单发送到外部脚本 但我似乎无法让数据到达外部脚本 除非我return false 在表格本身上 document ready function Handle Form Submission mainForm s
  • 无法在 Mac OSX 上使用 gtk3 FileChooser?

    我将使用 gtk 3 0 构建的程序从 Linux 迁移到 Mac OS X 10 6 8 而且我编译的程序没有错误 但是 在启动程序并选择打开文件后 终端显示以下消息 GLib GIO CRITICAL Settings schema o
  • 在我的 Mac 上安装 python 包(ffnet、spacepy)时找不到 -lbundle1.o 的库

    我在我的 mac 10 9 上安装了 anaconda python 发行版 我正在尝试安装ffnet http ffnet sourceforge net包和SpacePy http spacepy lanl gov包 但这样做时遇到麻烦
  • vl_dsift 尝试获取每个像素的特征向量

    我正在尝试使用 vl dsift 获取每个像素的 128 1 特征向量 因此我希望得到的矩阵具有大小 128 像素数 然而 当我在尺寸为 192 168 的图像上使用它时 生成的描述符给出尺寸 128 31 185 binsize 为 1
  • Designer 在加载/卸载时由 Visual Studio 添加然后删除

    有人以前见过这个吗 我有一个大型 Visual Studio 项目 不断添加 Subtype Designer Subtype to my vcproj然后在项目的下一次打开和关闭时将其删除 中只定义了一个类StoredImageContr
  • 实体框架设计器中的空白字符串默认值

    是否可以在实体框架的 EDMX 设计器中分配一个空白字符串 即 作为默认值 我发现的唯一技术是使用文本编辑器手动编辑 edmx 文件 我意识到这是一个非常古老的问题 但为了后代的缘故 在 EF4 设计器中 您可以在属性窗口字段中键入一个空格
  • 在 Swift 中创建 JSON 数组

    我的后端需要以下 JSON 正文 number 561310 number 132333 number 561310 当我像这样输入时 它在 Postman 中运行得非常好 如何使用 Swift 创建类似的 JSON 现在我有一个字符串类型
  • 304 If-None-Match有效时未修改

    我正在优化 Express JSON API 以供 iOS 和 Android 应用程序使用 当应用程序在 If None Match 标头中指定 etag 时 似乎无法让 Express 使用正确的 304 标头进行响应 我不需要设置 E
  • 在android中解析简单的json字符串

    我想使用 json 创建一个登录和注册系统 我想首先获取 url 的内容 然后解析 json 字符串 Json 字符串示例 employee mesg username is exsist id 0 name 0 username 0 em
  • 用于换行的 CSS 选择器

    假设我有一些相邻的元素 div class container div 1 div div 2 div div 3 div div 4 div div 5 div div 6 div div 样式如下 container gt div di
  • 我可以在 Cordova 2.5 上多次监听 deviceready 吗?

    我可以为每个 html 页面注册 deviceready 事件吗 我使用 Cordova 2 5 的初始化代码并且工作正常 当我将这些代码复制到新的html文件时 它总是调用index html的initialize 函数 var app
  • 使用 Youtube API v3 从特定频道搜索视频

    在我的项目中 我尝试使用特定频道中的关键字进行搜索查询 在 Youtube API v3 的文档中 他们说要在特定频道中搜索 您需要将channelId放入查询中 但它似乎不起作用 现在 我正在使用 YouTube Direct Lite
  • 将 Java PriorityQueue 更改为最大 PQ [重复]

    这个问题在这里已经有答案了 Java 标准库中的优先级队列实现似乎是一个最小优先级队列 我发现这有点令人困惑 为了将其变成最大的 我创建了一个自定义比较器对象 Comparator
  • Gradle 同步错误:未找到名称为“default”的配置

    我想添加外部库GuillotineMenu Android https github com Yalantis GuillotineMenu Android在我的应用程序中 我按照现有问题的得票最高的答案中给出的步骤进行操作如何将库项目添加
  • 在 WordPress 页面和帖子中插入 PHP 代码

    我想知道visitor使用 PHP 的国家并将其显示在 WordPress 页面上 但是当我将 PHP 代码添加到 WordPress 页面或发布时 它会出现错误 我们如何在 WordPress 页面和帖子上添加 PHP 代码
  • 类型错误:尝试分配给只读属性。在 iOS8 Safari 上的 Angularjs 应用程序中

    我们的移动应用程序收到 TypeError 尝试分配给只读属性 仅在 IOS 8 上 堆栈跟踪没有帮助 并且似乎在 Angular 代码中 发生这种情况可能是因为 Angularjs 代码顶层的 use strict 我的问题是 1 为什么
  • rownum / 获取前 n 行

    select from Schem Customer where cust 20 and cust id gt 890127 and rownum between 1 and 2 order by cust cust id 执行时间约2分1
  • 如何放大 Mapbox Leaflet 中的标记单击事件?

    我想在单击标记时放大该标记 我正在使用 Mapbox 和传单 I tried marker on click function e map setView e lat e lng 12 但这给了我某种错误 类型错误 t 为空 我什至尝试过
  • JOptionPane 显示选项对话框

    我想使用 JOptionPane 创建一个 showOptionDialog 它有两个按钮 公制和英制 如果单击 Metric 则会加载 Metric GUI 相反 如果单击 Imperial 则会加载 Imperial GUI 我该怎么做
  • 从头开始创建 LinkedList 类

    我们的任务是从头开始创建一个 LinkedList 但绝对没有任何读物来指导我们完成这项令人偏头痛的任务 而且网上的所有内容似乎都只是使用 Java 内置的 LinkedList 方法和东西 无论如何 当使用 Java 的默认内容时 链表非