Ir ao conteúdo

Posts recomendados

Postado

Estou novamente estudando estruturas de dados e resolvi usar como base um livro de estrutura de dados usado JavaScript. O código inicial de linkedList.js está assim:

 

import {defaultEquals} from '../util/util.js';
import { Node } from './models/linked-list-models.js';

export default class linkedList{
//Aqui ficara o construtor...
constructor(equalsFn = defaultEquals){
    this.count = 0;
    this.head = undefined;
    this.equalsFn = equalsFn;
}

//Aqui comecam os metodos...
push(element){
    const node = new Node(element);
    let current;        

    console.log(this.head);
    if (this.head == null){                     
        this.head = node;
        
    }
    else{            
        current = this.head;
        while(current.next != null){                
            current = current.next;
        }
        current.next = node;
    }
    this.count++;              
    }    
}

let a = new linkedList();
a.push(1);
a.push(2);
a.push(3);
a.push(4); 

 

E o código da classe linked-list-models.js a qual é usada pelo método push está assim:

 

export class Node {
constructor(element){
    this.element = element;
    this.next = undefined;
    }
} 

 

E o código de util.js (não usando no momento) está assim:

 

export function defaultEquals(a, b){
    return a === b; //exporta o valor de comparacao entre dois valores em um booleano
}

 

A minha dúvida é simples, pois não consigo entender como o atributo this.head é atualizado e como ele se torna uma lista encadeada, pois somente node e current/current.next são atualizados.

Agradeço a todos desde já!

PS: Em anexo segue um zip com os códigos e um print da saída no visual code que me deixa com bastante dúvida.

duvida_estrutura_de_dados.png

LinkedList.zip

Postado

@paulopimenta6 No javascript quando você faz uma atribuição de um tipo não primitivo, nesse caso um object, array, class ext,, ele não copia os valores da variável e sim cria um ponteiro para o valor do objeto.

 

Um exemplo para você testar e ter uma ideia.

const lista = [1, 2, 3];

const lista_2 = lista;

lista_2.push(4);

console.log("Lista 1:", lista);
console.log("Lista 2:", lista_2);

if ([] === []) {
  console.log('É igual')
} else {
  console.log('Não é igual')
}

// Copia
const lista_3 = Object.assign([], lista); // Criando um novo valor na memória

lista_3.push(5)

console.log(lista_3);

 

  • Curtir 1
Postado

@GabrielSennaMs obrigado pela ajuda! Como ponteiro fica mais fácil visualizar a criação dos nós. Mas eu fico ainda com uma dúvida, dentro do "while" current e current.next são atualizados e não afetam this.head o qual só é modificado quando current.next recebe node.

 

Por quem current e current.next dentro do while não afetam this.head?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!