使用 JavaScript 以奇偶节点顺序排列单链表2025年03月17日 | 阅读 9 分钟 引言JavaScript 是一种面向对象的编程语言,通常用于增强互联网功能。JavaScript 的一个令人兴奋的操作是处理数据结构,包括链表。在本教程中,我们将探索如何使用 JavaScript 按奇偶节点交替、不寻常和偶数顺序排列链表。这个算法问题需要对链表有扎实的了解,以及正确分割和操作节点的能力。 链表概述链表是一种类似于节点的线性结构,其中每个节点都指向集合中的下一个节点。单链表以其简洁和动态的性质为特征,使其成为解决此问题的理想解决方案。 问题陈述给定一个单链表,任务是以这样一种方式排列其节点,使得所有奇数位置的节点都被偶数位置的节点跟随。例如,包含元素 1->2->3->4->5 的链表需要重新排列为 1->3->5->2->4。 方法要解决此问题,我们可以使用 JavaScript 采用循序渐进的方法。首先,我们需要分割链表,并将奇数或偶数节点分隔到单独的列表中。然后,我们将按所需的顺序合并这些列表。 JavaScript 为处理算法问题提供了一个有效且简洁的平台,包括链表等数据结构的操纵。在本教程中,我们探索了一种以交替的奇偶节点顺序重新排列单链表的方法。理解链表的基础知识并利用 JavaScript 的功能使我们能够将一种有效的方法应用于此问题。随时发展和扩展此代码以满足不同的链表操作需求,或探索 JavaScript 编程领域中更高级的算法。 ![]() 方法 1(简单)在此方法中,我们创建两个栈:奇数栈和偶数栈。我们遍历链表,当遇到奇数位置的偶数节点时,我们将该节点地址压入偶数栈。如果我们遇到偶数位置的奇数节点,则将其地址压入奇数栈。遍历完链表后,我们弹出两个栈顶的节点并交换它们的数据。我们重复此步骤,直到栈变空。 步骤 1 创建奇数和偶数两个栈。这些栈将存储链表中节点的指针。 步骤 2 使用变量 current 从头到尾遍历链表。重复以下操作。 步骤 3 如果当前节点是偶数并且出现在奇数位置,则将该节点地址压入偶数栈。 步骤 4 如果当前节点是奇数并且出现在偶数位置,则将该节点地址压入奇数栈。 (遍历结束)。 步骤 5 两个栈的大小将是相同的。当两个栈都不为空时,交换两个栈顶的节点。然后从各自的栈中弹出两个节点。 步骤 6 链表现已重新排列。 停止 实施输出 上述代码的输出是 ![]() 说明 提供的 JavaScript 代码定义了一个链表,并实现了一个函数来根据其位置和值重新排列其节点。链表由一个节点类表示,每个节点都有一个数据字段和一个指向下一个节点的后续指针。printList 指针指向链表的元素。 newNode 函数创建一个具有唯一且重要值的新节点。insert 函数将新节点插入链表的前面。 主要逻辑包含在 rearrangeOddEven 函数中,该函数遍历链表,将奇数值放到偶数位置或偶数值放到奇数位置到单独的栈(普通和偶数)中。然后,它交换两个栈中对应节点的数值。 驱动代码创建链表,并在重新排列奇偶位置的元素后打印链表。重新排列是通过交换值来实现的,从而得到一个修改后的链表。 ![]() 方法 2(高效)
1. 步骤 1 使用 NODE TEMP 遍历链表。 如果 TEMP 是奇数 将 TEMP 添加到链表的前面。 (IF 结束) (遍历结束) 步骤 2 将 TEMP 设置为链表的交替细节。 步骤 3 将 PREV_TEMP 设置为链表的第一个元素。 步骤 4 遍历节点 TEMP 的操作是一个很好的 节点尚未遇到。 = TEMP, TEMP = TEMP- > NEXT (遍历结束) 步骤 5 将 Even 设置为 TEMP。将 PREV_TEMP- > NEXT 设置为 NULL 步骤 6 I = HEAD, J = Even 步骤 7 重复,直到 I != NULL 且 J != NULL 将 I 和 J 的后续节点存储在 K 和 L 中。 K = I- > NEXT, L = J- > NEXT I- > NEXT = J, J- > NEXT = K, PTR = J I = K,J = L。 (循环结束) 步骤 8 如果 I == NULL PTR- > NEXT = J (IF 结束) 返回 Head。 步骤 9 End 代码 输出 上述代码的输出是 ![]() 说明 提供的 JavaScript 代码演示了通过将链表节点分离成奇数或偶数节点,将它们解耦,然后合并偶数节点到奇数节点中来重新排列单链表。 Node 类定义了链表节点的结构,具有一个数据字段和一个指向下一个节点的指针。printList 函数用于显示链表的元素。 newNode 函数创建一个具有给定值的节点,并将新节点插入到链表的开头。 rearrange 函数执行重新排列过程。它首先通过将奇数节点移到前面来分离奇数或偶数节点。然后,它将链表分成奇数和偶数部分。最后,它将偶数列表合并到奇数列表中。 驱动代码创建链表,打印链表,执行 rearrange 函数的重新排列操作,然后打印修改后的链表。重新排列确保最终链表中奇数和偶数的相关元素是交替排列的。 结论最后,实现 JavaScript 函数以交替的奇偶节点顺序排列单链表,展示了该语言在处理算法要求高的场景下的多功能性和有效性。所提供的方法利用链表的基本结构来有效地分离奇数或偶数节点,然后再将它们合并到所需的顺序中。 这个问题突出了对数据结构(特别是链表)的扎实掌握以及高效地分割和操纵节点的能力的重要性。JavaScript 的模块化和面向对象的性质,如代码所示,有助于解决方案的清晰性。 作为开发人员,对代码进行修改和扩展以处理类似的任务或探索更高级的算法将是可行的,这展示了 JavaScript 在解决各种编程挑战方面的强大功能。总的来说,本教程不仅解决了特定的链表重新排列问题,还作为 JavaScript 应用中算法问题的一个实际示例。 |
在本文中,我们将了解如何在 JavaScript 中检查子字符串。让我们首先了解字符串和子字符串。字符串字符串是字符的集合,用于表示文本。在 JavaScript 中,它是一种数据类型,包含符号、空格、字母和...
阅读 4 分钟
? IIFE 的基本概念 在 JavaScript 中,一个被称为立即调用函数表达式 (IIFE) 的函数在定义后立即执行。IIFE 的这种设计模式也称为自执行匿名函数。它们与常规函数不同,因为 IIFE 在创建后立即被调用...
阅读9分钟
在 Web 开发领域,JavaScript 对象表示法 (JSON) 已成为数据交换的事实标准。JSON 提供了一种轻量级且易于阅读的格式,用于在服务器和 Web 应用程序之间存储和交换数据。在 JavaScript 中处理 JSON 数据时,它...
阅读 6 分钟
方法 trim() 是 JavaScript 中内置的字符串函数,用于修剪字符串。此函数从字符串的两端(即开头和结尾)删除空格。由于 trim() 是一个字符串方法,因此可以通过...调用它。
7 分钟阅读
JavaScript 是现代 Web 开发的支柱,为网站和在线应用程序提供了动态和交互式的内容,几乎在当今所有网站上都能看到。学习 JavaScript 对任何梦想从事 Web 开发的人来说都是一项重要的要求...
阅读 6 分钟
JavaScript 中的模板字面量是什么?在 JavaScript 中,模板字面量(也称为模板字符串)是一种允许你在字符串中嵌入表达式的功能。它们被反引号包围,而不是单引号或双引号。在 JavaScript 中,模板字面量是一项引入的功能……
阅读 6 分钟
在游戏开发的领域中,选择正确的引擎会对项目的成功与否产生重大影响。Web 开发已被 JavaScript 完全改变,它的灵活性甚至延伸到了……
阅读 6 分钟
平均值是数组的平均值以及数据的分组。我们可以使用排序或未排序数组的平均值和哈希。我们可以使用值与组长度之商的总和...
阅读 3 分钟
React 是 Facebook(现称为 Meta)为其自有平台创建的一个库,但由于其在创建 Web 应用程序用户界面方面的流行和优势,它被开源了。React 最常用于创建单页 Web 应用程序,这意味着...
14 分钟阅读
JavaScript 箭头函数没有“this”值或任何参数。不建议将其用作事件处理程序、对象字面量方法或原型方法。如果函数应用了 arguments 对象,则箭头函数无法正常工作。的...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India