糯麦 NurMai

糯麦科技

/

新闻资讯

/

技术讨论

/

JavaScript单链表的遍历和插入

JavaScript单链表的遍历和插入

原创 新闻资讯

于 2023-12-14 08:31:29 发布

2159 浏览

单链表是一种非顺序非连续的数据结构,由若干节点组成,每个节点有value值和指向下一个node的next指针,具体地:


单链表:

class SLinkList {
   constructor() {
     this.size = 0 
     this.head = null //头节点
    }
}

node节点:

class Node {
  constructor(value) {
    this.value = value
    this.next = null
  }
}

查找链表中某个位置的节点:

find(pos){
        let node= this.head
        while((pos--) && node.next){
            node = node.next
        }
        return node
    }

实现向链表中pos位置后添加数据:

append(value, pos){
       if (this.size) {
          const findNode = this.find(pos)
          const insertNode = new Node(value)
          insertNode.next = findNode.next
          findNode.next = insertNode 
        } else {
          this.head = new Node(value)
       }
       this.size ++
    }

遍历链表:

traversal(callback) {
  let currentNode = this.head
  while (currentNode) {
    callback(currentNode.value)
    currentNode = currentNode.next
  }
}

完整的SLinkList代码:

class SLinkList {
   constructor() {
        this.size = 0 
        this.head = null //头节点
    }

   find(pos){
        let node = this.head
        while((pos--) && node.next){
            node = node.next
        }
        return node
    }

   append(value, pos){
       if (this.size) {
          const findNode = this.find(pos)
          const insertNode = new Node(value)
          insertNode.next = findNode.next
          findNode.next = insertNode 
        } else {
          this.head = new Node(value)
       }
       this.size++
    }

   traversal(callback) {
     let currentNode = this.head
     while (currentNode) {
       callback(currentNode.value)
       currentNode = currentNode.next
     }
    }
}

调用:

const list = new SLinkList()

list.append('a1')

list.append('b1', 1)

list.append('c1', 2)

list.append('d1', 3)

list.append('e1', 4)

list.append('f2', 2)

list.append('g2', 3)

list.traversal(console.log)

输出结果:
a1
b1
c1
f2
g2
d1
e1

JavaScript

网站开发

小程序开发

阅读排行

  • 1. 几行代码就能实现Html大转盘抽奖

    大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。

    查看详情
  • 2. 温州小程序开发市场调研

    随着互联网技术的不断发展,传统市场正面临着数字化转型的挑战和机遇。温州作为中国的重要商业城市之一,其传统市场具有独特的特点和运营模式。本文将从温州传统市场的特点出发,探讨如何开发出适合温州市场的小程序系统。

    查看详情
  • 3. 微信支付商户申请接入流程

    微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。

    查看详情
  • 4. 微信小程序中父子组件相互调用详解

    在微信小程序中,组件化开发是一种重要的开发模式,它能够将复杂的界面拆分成多个独立的组件,使代码更容易维护和扩展。在组件化的开发中,父子组件之间的相互调用和传参是常见的需求。

    查看详情
  • 5. 浙江省同区域公司地址变更详细流程

    提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)

    查看详情