链表
2021/7/27 23:36:10
本文主要是介绍链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Node.js自定义链表
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是每一个结点(数据存储单元)里存放下一个结点的信息(即地址)
方法介绍:
. is_empty():链表是否为空 . length():链表长度 . travel():遍历整个链表 . add(item):链表头部添加元素 . append(item):链表尾部添加元素 . insert(pos, item):指定位置添加元素 . remove(item):删除节点 . search(item):查找节点是否存在 . reverse(): 链表倒置
代码:
class Node { // 节点 constructor(item) { this.item = item this.next = null } } class Link { // 链表 constructor() { this._head = null } add(item) { // 添加元素 let node = new Node(item) node.next = this._head this._head = node } travel() { // 遍历 let cur = this._head while (cur) { console.log(cur.item) cur = cur.next } } isEmpty() { return this._head === null } length() { // 长度 let count = 0 let cur = this._head while (cur) { count += 1 cur = cur.next } return count } append(item) { // 向链尾添加元素 let node = new Node(item) if (this._head === null) { this._head = node return } let pre = null let cur = this._head while (cur) { pre = cur cur = cur.next } // 当while循环结束的时候,pre就指向了链表中最后一个节点 pre.next = node } insert(pos, item) { // 将item对应的节点插入到pos指定的位置中 let node = new Node(item) if (pos === 0) { node.next = this._head this._head = node return } let cur = this._head let pre = null for (let i = 0; i < pos; i++) { pre = cur cur = cur.next } pre.next = node node.next = cur } remove(item) { // 删除节点 if (this._head && this._head.item === item) { this._head = this._head.next return } let cur = this._head let pre = null while (cur) { pre = cur cur = cur.next if (cur.item === item) { pre.next = cur.next return; } } } search(item) { // 查询某个节点是否存在 let cur = this._head while (cur) { if (cur.item === item) { return true } cur = cur.next } return false } reverse() { // 链表倒置 let pre = this._head let cur = pre.next let next_node = cur.next pre.next = null // 链表倒置后pre就是最后一个节点,最后一个节点的next指向None while (1) { cur.next = pre pre = cur cur = next_node if (next_node !== null) { next_node = next_node.next } else { break } } this._head = pre } } link = new Link() link.add(1) link.add(2) link.add(3) link.add(4) link.add(5) link.insert(0, 0) link.remove(0) link.reverse() link.travel() console.log(link.isEmpty()) console.log(link.length())
这篇关于链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?