关于链表实现队列代码的问题
来源:2-15 用 JS 实现二分查找-分析时间复杂度
weixin_宝慕林8180759
2022-05-01
delete(): number | null {
const headNode = this.head
if (headNode == null) return null
if (this.len <= 0) return null
// 取值
const value = headNode.value
// 处理 head
this.head = headNode.next
// 记录长度
this.len--
return value
}
如果现在链表只有一个元素,然后我删除最后一个元素,此时会执行上面的代码,但是tail不会设置为null,导致之后再做add会有一点问题.
单元测试我加了一个
it("add , delete and then add", () => {
const q = new MyQueue();
q.add(100);
q.add(200);
q.delete();
q.delete();
q.delete();
expect(q.length).toBe(0);
q.add(400);
expect(q.length).toBe(1);
q.add(500);
expect(q.length).toBe(2);
expect(q.delete()).toBe(400);
expect(q.delete()).toBe(500);
expect(q.delete()).toBeNull();
});
这个单元测试是通过的,但是查看数据的时候,我发现,200的next会指向400,这样的话,200会被垃圾回收掉吗?会不会有内存泄漏的问题呢?求解!
写回答
1回答
-
如果链表只有一个元素,想要删除,可以做特殊处理,直接把 tail 和 head 赋值为 null 即可,不用这么多逻辑。
012022-05-01
相似问题