将链表的头部移动到尾部

2023-12-13

我需要用 Java 编写一个方法,将链表中的第一个元素移动到最后一个位置。

为了实现这一点,我相信我必须设置一个节点来引用 head 之后的第一个元素,然后将下一个节点设置为 null。我尝试用我的方法执行此操作,但是运行该方法时,输出不正确。

我的课程的其余部分很可能太大,无法发布在这里,但我认为我只需要帮助概念化如何将第一个元素移动到列表的末尾。

我写的方法是:

public void moveFirstToEnd() {
    if (head.next == null) {
        throw new NoSuchElementException();
    } 

    Node node = head.next;
    node.next = null;
    head.next = node;
    tail.next = node;
    tail = node;
}

您想要删除列表的头部并将其作为新的尾部。您应该在脑海中弄清楚如何做到这一点,代码将是其逻辑表示。

  1. 删除列表的头部。新头成为下一个项目。
  2. 被移除的项目现在是独立的;之后就什么都没有了。
  3. 将节点放在链表的末尾。新的尾部成为该节点。

正如您所看到的,您现在的代码并没有完全做到这一点。一次完成一个步骤:

所以,第 1 步:

Node node = head;
head = head.next; // <- remove head, new head becomes next item

然后,第2步:

node.next = null; // there's nothing after it.

最后,第 3 步:

tail.next = node; // <- add to end of list
tail = node; // <- becomes new end of list

或者,如果您更愿意想象它:

Node node = head:

+------+    +------+    +------+    +------+
| head |--->|      |--->|      |--->| tail |
+------+    +------+    +------+    +------+
  node

head = head.next:

+------+    +------+    +------+    +------+
|      |--->| head |--->|      |--->| tail |
+------+    +------+    +------+    +------+
  node

node.next = null:

+------+    +------+    +------+    +------+
|      |    | head |--->|      |--->| tail |
+------+    +------+    +------+    +------+
  node

tail.next = node:

            +------+    +------+    +------+    +------+
            | head |--->|      |--->| tail |--->|      |
            +------+    +------+    +------+    +------+
                                                  node

tail = node:

            +------+    +------+    +------+    +------+
            | head |--->|      |--->|      |--->| tail |
            +------+    +------+    +------+    +------+
                                                  node

顺便说一句,如果你已经有一个popFront(或其他)和/或append定义的操作,不要忘记您也可以使用它们;没有意义重复代码:

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

将链表的头部移动到尾部 的相关文章

随机推荐

  • 如何唯一标识 ContactsContract.Contacts 表上的联系人

    我有一个应用程序可以获取ContactsContract Contacts LOOKUP KEY设备上的联系人并将其保存在应用程序数据库中 看完之后this页面我想我可以使用LOOKUP KEY唯一标识联系人 即使在编辑联系人时 例如编辑联
  • 奇怪的浮点除法结果

    我在一个grails项目中发生了这个奇怪的除法错误 但我认为grails与它无关 我认为是一个groovy或java问题 如果在常规控制台中我运行这个 float money 1 30 float r 0 01 println money
  • 绑定祖先不工作 WPF

    我有一个 TreeView 它被修改为在文本前面显示图像 所以我修改后的TreeViewItem叫做ImagedTreeViewItem 此 ImagedTreeViewItem 有一个属性 其中包含要显示的图像控件的图像 ImagedTr
  • WebDriver 测试未在 IE11 上运行

    当我运行 WebDriver 测试时 它们根本不工作 到目前为止我所做的 1 我已更新我的注册表项以包含 FEATURE BFCACHE 2 所有区域的保护模式设置均相同 3 增强保护模式被禁用 4 我还尝试在我的 PATH 中设置 IED
  • 推荐用于 JavaScript 编码的 Vim 插件? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我是 JS 和 Vim 的
  • 当位置设置为固定时,导航栏会缩小

    我目前遇到一个问题 当我将导航栏和横幅的位置设置为固定时 它们会缩小 我有很多事情 例如更改 z index 将其顶部位置设置为 0 添加自动边距等 但这些都不起作用 我希望有人能指出我的错误 这是我的html代码 html body ma
  • 有没有办法对VBS中存储的密码进行加密

    我有一个在工作中使用的 VBS 脚本 用于在连接到 Cisco 路由器和交换机时自动执行任务 包括自动执行登录过程 人们对于将密码存储在纯文本 VBS 文件中有些紧张 这并非没有道理 因此我为他们提供了每次提示输入密码或将其存储在脚本中的选
  • Canvas.toDataURL() 未捕获类型错误:未定义不是函数

    我正在使用一个名为 html2canvas 的插件将页面上的一些 html 转换为 canvas 元素 然后我想将该画布保存为图像 不幸的是我一直遇到标题中的错误 我尝试过使用不同的变量名 不同的 html 等 但不断遇到相同的错误 这是我
  • 复制 local = false 文件未找到异常问题

    嗨 我知道这个已被询问但并没有得到答复 当我想使用安装在 C Program files x86 Dummu API dll 上的 dll 时遇到问题 当我运行我的应用程序时 它抛出异常 无法加载文件或程序集 Dummy API Versi
  • 硒点击表td内的锚标记

    我的 html 代码如下所示 div class fd food search all fd loading style display block ul class fd breadcrumbs li a href class bread
  • 如何“加入”一个数组,将第一个要加入的字符添加到结果字符串的开头?

    我正在使用 Ruby on Rails 3 并且正在尝试join一个数组 特点 我阅读了 Ruby 文档关于那个 我的数组是 name1 name2 If I do name1 name2 join 结果是 name1 name2 我希望结
  • 类型别名的目的

    我想今天我终于明白什么是 typealias 了 我没有 让我们看一个例子 typealias Graph String String let futurama Graph you bender hermes scruffy bender
  • 从 iframe 访问父页面中的变量

    我有一个带有 iframe 的页面 其中包含 html 页面 我想从 iframe 中访问父页面中的 Javascript 变量 主页中变量的名称是observer 我已经尝试过这个 parent observer aadasds 但我收到
  • Distinct() 如何在对象列表中查找唯一元素

    有一个非常简单的类 public class LinkInformation public LinkInformation string link string text string group this Link link this T
  • 3D 三角形光栅化为体素网格

    序幕 这是将 3D 三角形光栅化为体素网格的问答 我被要求解决与以下相关的不同问题材料侵蚀 去除在制造过程模拟期间 这个问题背后的主要思想是如何移植基于扫描线的 2D 三角形光栅化 例如this转化为 3D 体素 所以问题是如何高效地光栅化
  • bash中删除长度小于2的单词

    我在 CentOS 5 5 上使用 bash 我有一个用空格分隔的字符串 并且该字符串只包含字母和数字 并且这个字符串可能有多余的空格 例如之间有超过1个空格 words and string exmple This is a lovey
  • 从 ASP.NET 5 中的 config.json 检索部分

    假设我有一个config json像这样 CustomSection A 1 B 2 我知道我可以使用IConfiguration对象获取特定设置 即configuration Get CustomSection A 但是我可以获取整个层次
  • 为什么我的帐户上的 OneNote API 延迟大约 3 天?

    简而言之 通过 OneNote API 获取笔记的页面信息有大约 3 天滞后的数据 为什么会出现这种情况 我假设只针对我 以及如何解决这个问题 我正在开发一个个人 R 程序来阅读我的 OneNote 笔记 大约一周前就启动并运行了 身份验证
  • 如何在textAngular编辑器中的范围var中删除占位符img?

    我在带有 Angular 的应用程序中使用 TextAngular 指令 当我插入 youTube 链接 通过工具栏按钮 时 它会在编辑器中显示占位符图像 我希望将所有 html 保存在 scope var 中 但不包含占位符 html 目
  • 将链表的头部移动到尾部

    我需要用 Java 编写一个方法 将链表中的第一个元素移动到最后一个位置 为了实现这一点 我相信我必须设置一个节点来引用 head 之后的第一个元素 然后将下一个节点设置为 null 我尝试用我的方法执行此操作 但是运行该方法时 输出不正确