为了账号安全,请及时绑定邮箱和手机立即绑定

我正在尝试从链接列表中删除重复项,但是重复项仍然存在

我正在尝试从链接列表中删除重复项,但是重复项仍然存在

德玛西亚99 2022-06-16 17:10:20
我有以下类 ListNodeclass ListNode {    constructor(val) {        this.val = val        this.next = null    }}我试图通过将值存储在哈希中来删除重复值,如果存在这些值,则不应使用这些值形成新节点;但是,我所完成的只是当前列表的副本。我不确定我在哈希中做错了什么。我的逻辑结构不正确吗?const deleteDuplicates = (head) => {    let newNode = new ListNode('dummy')    let current = newNode    let headHash = {}    while (head) {        if (headHash[head.val] === undefined) {            if (newNode.next === null) newNode.next = new ListNode(head.val)            else {                newNode = newNode.next                newNode.next = new ListNode(head.val)            }        }        headHash = (headHash[head.val] || 0) + 1        console.log(headHash, head.val);        head = head.next    }    return current.next}const l = new ListNode(1)l.next = new ListNode(1)l.next.next = new ListNode(2)const l2 = new ListNode(1)l2.next = new ListNode(1)l2.next.next = new ListNode(2)l2.next.next.next = new ListNode(3)l2.next.next.next.next = new ListNode(3)console.log(deleteDuplicates(l));console.log(deleteDuplicates(l2));
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

违规行似乎是这一行:


headHash = (headHash[head.val] || 0) + 1


您不必将整体分配headHash给一个值,而是必须将headHash的当前头值属性分配给一个未定义的值。请看下面的代码:


class ListNode {

  constructor(val) {

    this.val = val;

    this.next = null;

  }

}

const deleteDuplicates = (head) => {

  let newNode = new ListNode("dummy");

  let current = newNode;

  let headHash = {};


  while (head) {

    if (headHash[head.val] === undefined) {

      if (newNode.next === null) {

          newNode.next = new ListNode(head.val);

      } else {

          newNode = newNode.next;

          newNode.next = new ListNode(head.val);

        }

    }

    // headHash = (headHash[head.val] || 0) + 1 // <- offending line

    headHash[head.val] = (headHash[head.val] || 0) + 1; // You need to assign the value to the headHash's key, not to the headHasn itself.

    head = head.next;

  }

  return current.next;

};


const l = new ListNode(1);

l.next = new ListNode(1);

l.next.next = new ListNode(2);


const l2 = new ListNode(1);

l2.next = new ListNode(1);

l2.next.next = new ListNode(2);

l2.next.next.next = new ListNode(3);

l2.next.next.next.next = new ListNode(3);




console.log(deleteDuplicates(l));

console.log(deleteDuplicates(l2));


查看完整回答
反对 回复 2022-06-16
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号