理解链表实现的问题

2023-12-04

更新:非常感谢所有回复的人!这让我觉得在学习 Java 的过程中我并不孤单。请原谅,但我想我没有足够澄清我对链表和练习应用程序的不了解 -

首先 - 类定义如何包含其自身的对象,好吧,我知道这是递归,但对我来说仍然是一个非常奇怪和陌生的概念。

第二 - 链表对象究竟如何“链接”到另一个节点?

第三 - 如果两个对象由等号分隔,这意味着什么 - 第二个对象消失了,剩下的就是它的“名称”现在指向第一个对象,反之亦然?

然后 - 关于下面引用的程序,我不明白的事情如下:在实例化 linkList 类之后,调用它的构造函数,并首先为 Link private Link 类的对象赋予 null 值,即将其设置为指向什么都没有。然后,当创建第一个新节点时,调用方法 public void insertFirst ,它将对象值赋予其变量,然后发生了一些荒谬的事情 - 指向任何内容的对象first被分配给新项目,从而使两个对象都指向什么也没有,第一个= newLink;我完全迷失了...

我正在上一门关于算法和数据结构的大学课程,由于教授真的很刻薄,他的解释毫无用处,所以我试图从罗伯特·拉福尔写的一本名为《算法和数据结构》的书中自学。

现在我正在学习链表,书中有以下链表实现的代码示例:

链接.java:

class Link
   {
   public int iData;              // data item
   public double dData;           // data item
   public Link next;              // next link in list

   public Link(int id, double dd) { // constructor
      iData = id;                 // initialize data
      dData = dd;                 // ('next' is automatically
      }                           //  set to null)

   public void displayLink() {     // display ourself
      System.out.print("{" + iData + ", " + dData + "} ");
      }
   }

链接列表.java:

class LinkList {
   private Link first;            // ref to first link on list

   public LinkList() {             // constructor
      first = null;               // no links on list yet
      }

   public boolean isEmpty() {      // true if list is empty
      return (first==null);
      }
                                  // insert at start of list
   public void insertFirst(int id, double dd) { // make new link
      Link newLink = new Link(id, dd);
      newLink.next = first;       // newLink --> old first
      first = newLink;            // first --> newLink
      }

   public Link deleteFirst() {     // delete first item
      // (assumes list not empty)
      Link temp = first;          // save reference to link
      first = first.next;         // delete it: first-->old next
      return temp;                // return deleted link
      }

   public void displayList() {
      System.out.print("List (first-->last): ");
      Link current = first;       // start at beginning of list
      while(current != null)      // until end of list,
         {
         current.displayLink();   // print data
         current = current.next;  // move to next link
         }
      System.out.println("");
      }
   }

LinkListApp.java:

class LinkListApp {
   public static void main(String[] args) {
      LinkList theList = new LinkList();  // make new list

      theList.insertFirst(22, 2.99);      // insert four items
      theList.insertFirst(44, 4.99);
      theList.insertFirst(66, 6.99);
      theList.insertFirst(88, 8.99);

      theList.displayList();              // display list

      while( !theList.isEmpty() ) {        // until it's empty,
         Link aLink = theList.deleteFirst();   // delete link
         System.out.print("Deleted ");         // display it
         aLink.displayLink();
         System.out.println("");
         }
      theList.displayList();              // display list
      }
   }

我只是无法理解在链接列表类中插入和显示项目的代码。

怎么会这样newLink.next = first; and first = newLink;新对象创建后?

请帮忙!


Each Link持有参考.next到下一个Link元素(除了最后一个元素,具有.next = null.

A LinkList持有一个参考(.first)到第一个Link它包含的对象。

为了插入新的Link在前面LinkList,我们需要执行以下操作:

  1. 创建一个新的Link要插入到前面的对象 (newLink).
  2. 让新创建的Link指向前一个Link对象作为其.next
  3. 重置.first的参考LinkList to the newLink对象,有效地覆盖先前的引用(下面用叉号标记)。

Source: See cacoo.com/diagrams/SRZoHdJ4GEn5PKAF

这正是发生的事情:

public void insertFirst(int id, double dd) {
    Link newLink = new Link(id, dd);
    newLink.next = first;
    first = newLink;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解链表实现的问题 的相关文章

随机推荐

  • 有没有办法在 Hive CREATE TABLE 语句本身中指定传入数据的日期/时间戳格式?

    我有一个 CSV 文件 其中包含以下格式的日期和时间戳值 例如 Col1 col2 01JAN2019 01JAN2019 17 34 41 但是 当我在 create 语句中将 Col1 定义为 Date 将 Col2 定义为 Times
  • SCHED_OTHER/SCHED_FIFO 的 pthread sched_get_priority_min/max 实现

    我正在尝试为我正在从事的项目编写一个半可移植线程类 在尝试设置线程的优先级时 我遇到了 pthread 世界中的一个难题 给出以下代码 include
  • AEM 6.1 使用的 Ext JS 版本

    AEM 6 1 使用哪个版本的 Ext JS 库 有没有直接的方法 控制台可以找到这个问题 It uses v3 4 0ExtJS 的基础上构建了 AEM Widget 库 您可以在以下位置找到详细信息 libs cq ui widgets
  • 如何将绘制的线保留在补丁下方

    在下面的代码中 我绘制了一条线 然后在其上方绘制了一个不透明补丁 alpha 1 我希望被补丁覆盖的线部分被隐藏 但看起来好像线是在补丁之后绘制的 如何更改 使线条不显示出来 该代码改编自这个 matplotlib 示例 import ma
  • Android:将视图投射到视图

    我有一个扩展视图的类 MyView 扩展视图 在活动中我有下一个 View view View findViewById R id relative layout view here I have error because of cast
  • 如何检查R中函数的所有参数

    通常在 R 参数列表中包的 html 帮助中 以结尾 其他论点通过 但是我们如何在 R 中打印函数的所有参数 如果我正确理解你的问题 那么我倾向于说 大多数时候 不可能列出所有可能通过的参数 函数的 部分 请看一下非常简单的 plot功能
  • 如何获取 std::string 的准确长度?

    我正在修剪长条std string使用此代码将其放入文本容器中 std string AppDelegate getTrimmedStringWithRange std string text int range if text lengt
  • 这个Python装饰器是如何工作的?

    编辑 澄清以使我的问题具体到我的查询 我可以看到装饰器静态日志函数是如何调用的 但我不知道如何调用 被调用以及它的结果如何是log的结果 我看到了输入 输入内容是如何工作的 class logger staticmethod def log
  • 使用 python requests 模块在 Github 中创建经过身份验证的会话

    我的目标是在 github 中创建一个经过身份验证的会话 以便我可以使用高级搜索 这将功能限制为未经身份验证的用户 目前 我收到来自发布请求的网页响应 什么 您的浏览器执行了意外操作 如果问题仍然存在 请联系我们 这是我用来尝试完成我的任务
  • 随机数,分布不均匀[重复]

    这个问题在这里已经有答案了 可能的重复 生成密度不均匀的随机数 我尝试识别 创建一个函数 在 Java 中 它给我一个非均匀分布的数字序列 如果我有一个函数说function f x and x gt 0它会给我一个随机数 从0 to x
  • 如何确保从抽象泛型类派生的类使用自身作为泛型参数

    我有一个抽象类 public abstract class MyAbstractBase
  • 检查字符串的第一个字母是否为大写

    我想创建一个函数来检查字符串的第一个字母是否为大写 这是我到目前为止所想出的 def is lowercase word if word 0 in range string ascii lowercase return True else
  • Node.js、bluebird、执行路径控制不佳

    我正在努力学习蓝鸟 我没有按照自己的意愿控制执行 这个蓝鸟问题来自 async js 问题Node js 异步模块 并发 这是一些代码 加上我期望得到的和我得到的 问题 为什么 3 函数在 1 1 和 2 函数结束以及 2 第一个错误检查函
  • 更改日期格式

    我有一个 DateTime 变量 例如时间戳 它以通常的格式保存日期 如下所示 11 1 2011 该变量用于构建 SQL 命令 Oracle数据库只接受以下格式的日期 YYYY MM DD 如何操作我的变量以这种格式存储日期 根本不要格式
  • 底部导航视图中所选选项卡的颜色

    我正在添加一个BottomNavigationView到一个项目 我想为选定的选项卡使用不同的文本 和图标色调 颜色 以实现灰显未选定的选项卡效果 使用不同的颜色android state selected true 在颜色选择器资源文件中
  • data.table中按组填充缺失值

    如果想要根据一组内的前 后非 NA 观察来填充变量的缺失值 则 data table 命令是 setkey DT id date DT value filled in DT is na value list id date value DT
  • 使用 C# 解析复杂的 XML

    我正在尝试使用 C 解析复杂的 XML 我正在使用 Linq 来完成它 基本上 我正在向服务器发出请求并获取 XML 这是代码 XElement xdoc XElement Parse e Result this newsList Item
  • 为什么要在 CSS 文件路径中添加版本号?

    我注意到有些网站将版本号 尤其是 放在 CSS 文件路径中 例如 放置版本号的主要目的是什么 如果目的是记住 CSS 文件上次更新的时间 那么版本号不应该作为注释添加到 CSS 文件中吗 From HTML5 样板文档 什么是 v 1 v
  • 可滑动的侧面菜单不起作用

    我为响应式页面 针对移动页面 编写了一个自定义可滑动侧菜单 这是代码 jQuery code window load function data toggle click function var toggle el this data t
  • 理解链表实现的问题

    更新 非常感谢所有回复的人 这让我觉得在学习 Java 的过程中我并不孤单 请原谅 但我想我没有足够澄清我对链表和练习应用程序的不了解 首先 类定义如何包含其自身的对象 好吧 我知道这是递归 但对我来说仍然是一个非常奇怪和陌生的概念 第二