Я пытаюсь удалить дубликаты из связанного списка, но дубликаты все еще остаются - PullRequest
1 голос
/ 07 апреля 2020

У меня есть следующий класс ListNode

class ListNode {
    constructor(val) {
        this.val = val
        this.next = null
    }
}

Я пытаюсь удалить повторяющиеся значения, сохраняя значения в га sh, и если эти значения присутствуют, то новый узел не должен быть сформирован с этими ценностями; однако все, что я делаю, - это копия настоящего списка. Я не уверен, что я делаю неправильно в моем ха sh. Я неправильно структурирую логи c?

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 Ответ

0 голосов
/ 07 апреля 2020

Кажущаяся строка выглядит следующим образом:

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

Вместо того, чтобы назначать целое значение headHash, вам нужно будет присвоить headHash ' s текущее свойство значения головы к неопределенному значению. Смотрите код ниже:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...