Я пытаюсь понять концепцию передачи моей ссылки (указателей) в реализации Singlely Linked List в JavaScript - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь реализовать односвязный список в JavaScript, и мне трудно визуализировать концепцию передачи моей ссылки (и что указывает, куда). Мой код приведен ниже, и я подкрепил его несколькими вопросами или моим пониманием. Не могли бы вы, пожалуйста, go написать его и дать мне знать, если я думаю в правильном направлении.

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

class LinkedLists {
    constructor(){
        this.head = null;
        this.length = 0;
        this.tail = null;
    }

    // methods
    addNodeStart(val){
        let node = new Node(val);
        if (this.length === 0){
            this.length++;
            this.head = node;
            this.tail = node;

        } else {
            node.next = this.head;
            this.head = node;
            this.length++;
        }
        return this;
    }

    addNodeEnd(val){
        let node = new Node(val);

        if (this.length === 0){
            this.length++;
            this.head = node;
            this.tail = node;

        } else {
            this.length++;
            this.tail.next = node;
            this.tail = node;
        }
    }
}

Мое понимание :

  1. При добавлении узла в начало (addNodeStart) сначала мы создаем новый узел с заданным значением val и помещаем инструкцию if, чтобы проверить, равна ли длина 0, а затем устанавливаем хвост и голову как на новый узел.
  2. Иначе Если длина> 1, то сначала укажите node.next на this.head (this.head указывает на узел, который был установлен в качестве заголовка). Так this.head это просто контейнер, содержащий ссылку на узел ?? или this.head фактический узел? Затем снова установите this.head для узла. Является ли this.head просто именем переменной, например, пусть x = 5; здесь x ссылается на ячейку памяти 5.

Итак, я думаю, что this.head - это просто контейнер (переменная), которая содержит значение узла? или я что-то здесь упускаю?

1 Ответ

0 голосов
/ 04 мая 2020

Я не знаю, что вы пытаетесь сделать sh. Но, возможно, это полезно при отладке вашего списка: https://jsfiddle.net/nh0cLpq7/1/

вы можете использовать метод toArray, а затем просмотреть свой список в консоли.

LinkedLists.prototype.toArray = function() {
  let = element = this.head
  const array = []
  while(element) {
    array.push(element)
    element = element.next || null
  }
  return array
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...