本地刷算法的工具小函数(创建单链表、创建二叉树)Javascript

说明

这么大岁数了,得刷题。哎~ 经常写一些小工具用来自己写算法的测试用例,写吐了。之前分享过一些,懒得修改了。待新增其他。

上代码

代码包括函数实现和函数对应的测试代码,Browser和Node都可以用哈。

创建单链表(可带环)

function createLink(head, pos) {
  function ListNode(val, next = null) {
    this.val = val
    this.next = next
  }
  for (let i = head.length - 1; i >= 0; i--)
    head[i] = new ListNode(head[i], head[i+1])
  head[head.length - 1].next = head[pos] || null // 制造环或者无环
  return head[0]
}
createLink.__test__ = function() {
  const link1 = createLink([1,2,3]) // has no cycle
  console.assert(link1.val === 1)
  console.assert(link1.next.val === 2)
  console.assert(link1.next.next.val === 3)
  console.assert(link1.next.next.next === null)

  const link2 = createLink(['a','b','c'], 1) // has a cycle
  console.assert(link2.val === 'a')
  console.assert(link2.next.val === 'b')
  console.assert(link2.next.next.val === 'c')
  console.assert(link2.next.next.next === link2.next)
}
createLink.__test__()

创建二叉树

function createBTree(head) {
  function TreeNode(val = 0, left = null, right = null) {
    this.val = val
    this.left = left
    this.right = right
  }
  for (let i = head.length - 1; i >= 0; i--)
    if (head[i] !== null)
      head[i] = new TreeNode(head[i], head[i*2+1], head[i*2+2])
  return head[0]
}
createBTree.__test__ = function() {
  const tree1 = createBTree([1,2,3,null,5,6])
  console.log(tree1)
  console.assert(tree1.val === 1)
  console.assert(tree1.left.val === 2)
  console.assert(tree1.right.val === 3)
  console.assert(tree1.left.left === null)
  console.assert(tree1.left.right.val === 5)
  console.assert(tree1.right.left.val === 6)
}
createBTree.__test__()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值