Files
2022-01-14 09:43:16 -08:00

4.0 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d8251367417b2b2512c62 Creare una classe Lista Collegata 1 301628 create-a-linked-list-class

--description--

Creiamo una classe linked list. Ogni lista collegata dovrebbe iniziare con alcune proprietà di base: una testa head (il primo elemento nella tua lista) e una lunghezza length (numero di elementi nella tua lista). A volte vedrai implementazioni di liste collegate che incorporano una coda tail per l'ultimo elemento dell'elenco, ma per ora rimarremo solo con queste due. Ogni volta che aggiungiamo un elemento alla lista collegata, la nostra proprietà length dovrebbe essere incrementata di uno.

Vogliamo avere un modo per aggiungere elementi alla nostra lista collegata, quindi il primo metodo che vorremo creare è il metodo add.

Se la nostra lista è vuota, aggiungere un elemento alla nostra lista collegata è abbastanza semplice: basta che avvolgiamo quell'elemento in una classe Node, e assegnamo quel nodo alla testa (head) della nostra lista collegata.

Ma cosa succede se la nostra lista ha già uno o più membri? Come aggiungiamo un elemento alla lista? Ricorda che ogni nodo in una lista collegata ha una proprietà next. Per aggiungere un nodo all'elenco, trova l'ultimo nodo nell'elenco, e punta la proprietà next dell'ultimo nodo al nuovo nodo. (Suggerimento: saprai che hai raggiunto la fine di una lista collegata quando la proprietà next di un nodo sarà null.)

--instructions--

Scrivi un metodo di aggiunta add che assegna il primo nodo che inserisci nella lista collegata alla testa head; dopo, ogni volta che aggiungerai un nodo, esso dovrebbe essere referenziato dalla proprietà next del nodo precedente.

Nota

La lunghezza length della tua lista dovrebbe aumentare di uno ogni volta che un elemento viene aggiunto alla lista collegata.

--hints--

La tua classe LinkedList dovrebbe avere un metodo add.

assert(
  (function () {
    var test = new LinkedList();
    return typeof test.add === 'function';
  })()
);

La tua classe LinkedList dovrebbe assegnare head al primo nodo aggiunto.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    return test.head().element === 'cat';
  })()
);

Il node precedente nella tua classe LinkedList dovrebbe avere riferimento al nodo più recente creato.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    test.add('dog');
    test.add('fish');
    return test.head().next.element === 'dog' && test.head().next.next.element === 'fish';
  })()
);

La dimensione (size) della tua classe LinkedList dovrebbe essere uguale alla quantità di nodi nella lista collegata.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    test.add('dog');
    return test.size() === 2;
  })()
);

--seed--

--seed-contents--

function LinkedList() {
  var length = 0;
  var head = null;

  var Node = function(element){
    this.element = element;
    this.next = null;
  };

  this.head = function(){
    return head;
  };

  this.size = function(){
    return length;
  };

  this.add = function(element){
    // Only change code below this line

    // Only change code above this line
  };
}

--solutions--

function LinkedList() { 
  var length = 0; 
  var head = null; 

  var Node = function(element){
    this.element = element; 
    this.next = null; 
  }; 

  this.head = function(){
    return head;
  };

  this.size = function(){
    return length;
  };

  this.add = function(element){
    // Only change code below this line
    if (head == null) {
      head = new Node(element);
    } 
    else {
      let currentNode = head;
      while (currentNode.next != null) {
        // currentNode.next will be last node of linked list after loop
        currentNode = currentNode.next;
      }
      currentNode.next = new Node(element);
    }
    length++;
    // Only change code above this line
  };
}