说明
这么大岁数了,得刷题。哎~ 经常写一些小工具用来自己写算法的测试用例,写吐了。之前分享过一些,懒得修改了。待新增其他。
上代码
代码包括函数实现和函数对应的测试代码,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__()