数据结构 ~ 链表

什么是链表


链表由多种元素组成,元素储存不连续,用 next 指针联系在一起;
数组:非首尾增删需要移动元素;
链表:只需要更改 next 指向即可;
JavaScript 没有链表,但可以使用 Object 模拟:**

const a = { name: 'zhangsan' }
const b = { name: 'lisi' }
const c = { name: 'wangwu' }
const d = { name: 'zhaoliu' }

模拟链表:

a.next = b
b.next = c
c.next = d

遍历

let pointer = a // 指针,初始化指向首个元素
while (pointer) {
  console.log(pointer.name) // zhangsan lisi wangwu zhaoliu
  pointer = pointer.next
}

插入

const c2 = { name: 'sunqi' }
c.next = c2
c2.next = d

删除

b.next = d

删除元素


const a = { val: 4 }
const b = { val: 5 }
const c = { val: 1 }
const d = { val: 9 }
a.next = b
b.next = c
c.next = d

步骤一:将当前元素的 val 设置为当前元素下一个元素的 val
步骤二:将当前元素的指针 next 指向当前元素后第二个元素

const deleteNode = function (node) {
  node.val = node.next.val
  node.next = node.next.next
}
deleteNode(b)

反转指针


const a = { val: 2 }
const b = { val: 4 }
const c = { val: 6 }
const d = { val: 8 }

a.next = b
b.next = c
c.next = d
d.next = null

步骤一:保存当前元素的下一位元素
步骤二:当前元素的指针指向上一位元素
步骤三:保存当前元素
步骤四:当前指针指向下一位元素

const reverseList = function (head) {
  let p1 = head // 当前指针
  let p2 = null // 当前元素上一个元素的指针
  while (p1) {
    const tmp = p1.next // 保存当前元素的下一位元素
    p1.next = p2 // 当前元素的指针指向上一位元素
    p2 = p1 // 保存当前元素
    p1 = tmp // 当前指针指向下一位元素
  }
  return p2
}
reverseList(a)

JSON

通过指针进行遍历数据种的每一个 key、找到对象深层中的数据

const json = {
  a: { b: { c: 1 } }
}
const keys = ['a', 'b', 'c'] // 数据种的 key 集
let point = json // 指针
keys.forEach(key => {
  point = point[key]
})
console.log(point) // {c: 1}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值