资讯专栏INFORMATION COLUMN

用 JavaScript 实现链表操作 - 09 Move Node

suosuopuo / 2142人阅读

摘要:需求实现一个函数,把源链表的头节点移到目标链表。当源链表为空时函数应抛出异常。为了简化起见,我们会用一个对象来存储改变后的源链表和目标链表的引用。它也是函数的返回值。解法配合,这个非常简单,注意这个函数没有改变两个链表本身。

TL;DR

把一个链表的首节点移到另一个链表。系列目录见 前言和目录 。

需求

实现一个 moveNode() 函数,把源链表的头节点移到目标链表。当源链表为空时函数应抛出异常。为了简化起见,我们会用一个 Context 对象来存储改变后的源链表和目标链表的引用。它也是函数的返回值。

var source = 1 -> 2 -> 3 -> null
var dest = 4 -> 5 -> 6 -> null
moveNode(source, dest).source === 2 -> 3 -> null
moveNode(source, dest).dest === 1 -> 4 -> 5 -> 6 -> null

这个 kata 是下一个 kata 的简化版,你可以重用 第一个 kata 的 push 方法。

关于 Context

Context 的定义长这个样子,source 代表源链表,dest 代表目标链表。

function Context(source, dest) {
  this.source = source
  this.dest = dest
}
解法

配合 push ,这个 kata 非常简单,注意这个函数没有改变两个链表本身。代码如下:

function moveNode(source, dest) {
  if (!source) throw new Error("source is empty")
  return new Context(source.next, push(dest, source.data))
}
总结

这个 kata 本身很简单,就没有分递归和循环的版本了,其存在意义主要是为了下一个 kata 做铺垫。

算法相关的代码和测试我都放在 GitHub 上,如果对你有帮助请帮我点个赞!

参考资料

Codewars Kata
GitHub 的代码实现
GitHub 的测试

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81130.html

相关文章

  • JavaScript 实现链表操作 - 10 Move Node In-place

    摘要:需求实现一个函数,把源链表的头结点移到目标链表的开头。要求是不能修改两个链表的引用。跟前一个不同的是,这个是在不改变引用的情况下修改两个链表自身。最优的方案这个算法考的是对链表节点的插入和删除。大致思路为对做删除一个节点的操作。 TL;DR 用 in-place 的方式把一个链表的首节点移到另一个链表(不改变链表的引用),系列目录见 前言和目录 。 需求 实现一个 moveNode()...

    CNZPH 评论0 收藏0
  • JavaScript 实现链表操作 - 前言和目录

    摘要:我打算写一个链表操作的系列,来自的系列,实现语言是。通过自己实现一个链表和常用操作,可以加深理解这类数据结构的优缺点。链表经常用来训练指针操作,虽然这只对适用,但等高级语言中控制引用的思路其实也差不多。 TL;DR 我打算写一个链表操作的系列,来自 Codewars 的 Linked List 系列 kata ,实现语言是 JavaScript 。这篇是开篇,简单描述了一下我写这个的目...

    BetaRabbit 评论0 收藏0
  • JavaScript 实现链表

    摘要:相反,双向链表具有指向其前后元素的节点。另外,可以对链表进行排序。这个实用程序方法用于打印链表中的节点,仅用于调试目的。第行将更新为,这是从链表中弹出最后一个元素的行为。如果链表为空,则返回。 showImg(https://segmentfault.com/img/bVbsaI7?w=1600&h=228); 什么是链表 单链表是表示一系列节点的数据结构,其中每个节点指向链表中的下一...

    appetizerio 评论0 收藏0

发表评论

0条评论

suosuopuo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<