【摘要】 网上的相关教程非常多,基础知识自行搜索即可。习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/List

链表的基本知识

  • 特点:

    链表由节点组成,每个节点增加一个对象的引用指向它的后继节点。链表也就是将一个线性表转换为一个存储空间上不连续,而在抽象层面可连续访问的表。

  • 用途:

    更快的插入和删除,因为只需要操作插入删除位置相邻元素即可,如果在线性表中,操作中间位置的元素后,后续的元素位置都需要调整。javascript中的应用例如原型链。

  • 基本属性

    • element当前节点的值

    • next下一个节点

  • 基本方法

    插入一个元素,需要将item元素节点的next指向新元素,新元素的next指向item元素的后继元素。

    删除一个节点时,需要将其前驱节点的next指向其后继节点即可。

    • find(element)查询值为element的节点位置

    • findpre(element)查询值为element的节点的前一个节点

    • display()显示整个链表

    • remove(pos)从队头删除一个元素

    • insert(item, newitem)在item后面插入一个新元素newitem

基本练习

  1. 根据链表的基本特性实现一个LinkedList类,并在后续题目中需要用链表时使用它。

    【注意点】:删除指定元素时,由于需要修改指定元素前一个节点的next指针,所以当所查找的节点存在时,搜索方法应当返回其前一个节点以供后续步骤使用。

  2. 实现一个双向链表TwoWayLinkedList类。

    【注意点】:每一个实例会记录前驱节点和后继节点,双向链表比单链表增加了反向遍历的能力,并且由于所查找节点的属性中包含了前驱和后继节点的信息,故插入节点和删除节点时使用同一个搜索方法即可。

  3. LinkedList类为参考基准,实现一个循环链表CircularLinkedList类。

    【注意点】:循环链表的特点是尾节点的next指针指向了头节点。

课后习题(书中第六节习题)

  1. 实现Advance(n)方法,使节点向前移动n个节点。

  2. 实现back(n)方法,使节点向后移动n个节点。

  3. 实现show()方法,只显示当前节点上的数据。

  4. (略)

  5. (略)

  6. 传说在公元1世纪犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40个同胞被罗马士兵包围,犹太士兵决定宁可自 杀也不做俘虏,于是商量出一个自 杀方案。他们围成一个圈,从一个人开始,数到第三个人事将第三个人杀死,然后再数,直到杀光所有人,约瑟夫和另一个人决定不参加这个疯狂的游戏,他们快速地计算出两个位置,站在那里得以幸存。写一段将n个人围成一圈,并且第m个人会被杀掉,计算一圈中哪两个人最后会存货,使用循环链表解决该问题。

习题思路

  1. 向前移动n个位置,在位置验证合法时相当于,从原位置删除一个节点,在新位置插入一个节点,为操作方便直接使用双向链表来实现即可。【注意点】:示例代码中直接以放入链表的值为依据进行节点查找,故不支持重复数据,可为节点增加index属性来区分相同数据。

  2. 与上一题同理。

  3. 很好实现。

  4. 使用一个单链表来存储输入的成绩即可,当最后一个成绩节点的指针指向null即可。

  5. 用值为1-40的元素循环链表来删除节点直到总节点数目只剩2个为止。为了方便统计剩余元素的数量,为链表增加一个count属性来记录元素个数。

来源:华为云社区  作者:大史不说话

野生前端的数据结构基础练习(3)——链表相关推荐

  1. 野生前端的数据结构基础练习(6)——集合

    [摘要] 集合Set是一种不包含不同元素的数据结构,主要特性包括无序性和单一性,即集合中的成员是无序的,同时也是不重复的. 网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的 ...

  2. 野生前端的数据结构基础练习(5)——散列

    网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/dashn ...

  3. 野生前端的数据结构基础练习(8)——图

    [摘要] 图是由边的集合和点的集合组成的.如果图的边有方向(或者说图中的顶点对是有序的)则成为有向图,如果边没有方向则称为无向图. 网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orell ...

  4. 野生前端的数据结构基础练习(7)——二叉树

    [摘要] 网上的相关教程非常多,基础知识自行搜索即可.习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 网上的相关教程非常多,基础知识自行搜索即可. 习题主要 ...

  5. 野生前端的数据结构基础练习(4)——字典

    [摘要] 网上的相关教程非常多,基础知识自行搜索即可.习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/d ...

  6. 野生前端的数据结构基础练习(2)——队列

    网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/dashn ...

  7. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  8. 【数据结构基础】之链表介绍,生动形象,通俗易懂,算法入门必看

    前言 本文为 数据结构基础[链表] 相关知识,下边将对链表概念,单链表,双链表,循环链表,Java中链表的使用等进行详尽介绍~

  9. 数据结构基础(8) --单链表的设计与实现(1)之基本操作

    链表简介 数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.数组的删 ...

最新文章

  1. 杭电1284钱币兑换问题—背包dp/母函数(java)
  2. 1020. Tree Traversals (25) PAT甲级真题
  3. java rhino 运行 js_Mozilla Rhino :如何从Java调用JS函数
  4. 数据结构—二叉树,满二叉树、完全二叉树、二叉树的性质(思维导图)
  5. python ctypes实现api测试_Windows下通过Python 3.x的ctypes调用C接口
  6. 敏捷无敌之Gitlab CI实战
  7. 利用canvas制作乱跑的小球
  8. 经典网络结构梳理:SSD目标检测算法。
  9. copy uncode Cstring
  10. 百度地图点击触发事件介绍
  11. 关于学期结束的一些题目的记录
  12. 计算机win7如何连接wifi网络,win7怎么连wifi,win7电脑连不上网
  13. ACM里的生成函数初探
  14. 微信开发获取地理位置实例(java,非常详细,附工程源码)
  15. 此前小编为大家介绍了女人吃鸡蛋的好处,想必大家对鸡蛋这种蛋类有了更多的了解。今天小编为大家介绍另一种蛋类——鸭蛋。鸭蛋又名鸭卵,是人们经常食用的一种蛋类食品,与鸡蛋营养相当,吃它的好处众多。那么女人吃
  16. 零基础而且英语不好可以学java吗
  17. JAVA MemCache 史无前例的详细讲解
  18. 嵌入式系统与通用计算机操作系统的区别
  19. api21最新导航箭头动画的使用
  20. 李洪超 硬件工程师_壹号本推出工程师PC运维迷你电脑,7寸大小,丰富的接口配置...

热门文章

  1. mysql数据库如何配置服务_MySQL服务如何实现安装及配置
  2. swift java_swift语法和java的比较
  3. 红旗linux的安装命令,红旗linux安装【处理思路】
  4. python虚拟环境安装包_Python虚拟环境的创建和包下载过程分析
  5. Python的网络编程[1] - FTP 协议[1] - 使用 pyftplib 建立 FTP 服务器
  6. Centos6.5 安装Vim7.4
  7. 异常处理、集合框架和反射
  8. 关于 Hibernate 中的“脏数据”、“脏对象”
  9. leetcode 303 python(动态规划)
  10. 安卓mysql插入数据_Android批量插入数据到SQLite数据库的方法