Você está aqui: Python ::: Estruturas de Dados ::: Lista Ligada Simples |
Como inserir um novo nó na posição n de uma lista singularmente encadeada em PythonQuantidade de visualizações: 1076 vezes |
Depois de aprendermos a inserir nós no início e no final de uma lista singularmente ligada (singly linked list) em Python, chegou a hora de vermos o código que insere o nó em qualquer posição da lista. Este procedimento é um pouco mais complicado, e requer muita atenção para o seu perfeito entendimento. Note que temos agora um método inserir_posicao_n() que recebe o índice (começando em 0) da posição na qual queremos inserir o novo nó e a informação que estará contida no nó. No exemplo a seguir precisamos dos métodos inserir_inicio() e inserir_final() também. Isso faz sentido. Se o índice for 0 nós inserimos o novo nó no início, e se o índice for igual ao tamanho da lista nós inserimos no final. Caso contrário nós inserimos no meio da lista. Por "meio da lista" queremos dizer qualquer posição que não seja no início ou no fim da lista encadeada. Vamos começar então com o código para a classe No da lista singularmente ligada (que salvei em um arquivo no_lista_singularmente_ligada.py): # classe No para uma lista singularmente encadeada ou # ligada - Singly Linked List class No: # construtor da classe No def __init__(self, info, proximo): self.info = info self.proximo = proximo # método que permite definir o conteúdo do nó def set_info(self, info): self.info = info # método que permite obter a informação de um nó def get_info(self): return self.info # método que permite definir o campo próximo deste nó Veja que o código para a classe Nó não possui muitas firulas. Temos apenas um campo info, que guardará o valor do nó, e um campo próximo, que aponta para o próximo nó da lista, ou null, se este for o único nó ou o último nó da lista ligada. Veja agora o código para a classe ListaLigadaSimples (lista_ligada_simples.py), com os métodos get_tamanho(), inserir_inicio(), inserir_final(), inserir_posicao_n() e exibir(): # importa a classe No from no_lista_singularmente_ligada import No # classe ListaLigadaSimples class ListaLigadaSimples: # construtor da classe def __init__(self): self.inicio = None # nó inicial da lista # método que permite inserir um novo nó no final da lista def inserir_final(self, info): # cria um novo nó contendo a informação e que # não aponta para nenhum outro nó novo_no = No(info, None) # a lista ainda está vazia? if self.inicio == None: # o novo nó será o início da lista self.inicio = novo_no else: # obtemos uma referência ao nó inicial da lista no_atual = self.inicio # enquanto o próximo nó do nó atual não for nulo while no_atual.get_proximo() != None: # salta para o próximo nó no_atual = no_atual.get_proximo() # na saída do laço nós estamos no final da lista, # ou seja, no local adequada para a nova inserção no_atual.set_proximo(novo_no) # método que permite inserir um novo nó no início da lista def inserir_inicio(self, info): # cria um novo nó contendo a informação e que # não aponta para nenhum outro nó novo_no = No(info, None) # a lista ainda está vazia? if self.inicio == None: # o novo nó será o início da lista self.inicio = novo_no else: # o novo nó aponta para o início da lista novo_no.set_proximo(self.inicio) # o novo nó passa a ser o início da lista self.inicio = novo_no # método que permite retornar o tamanho da lista ligada, ou # seja, a quantidade de nós na lista encadeada simples def get_tamanho(self): # aponta para o início da lista no_atual = self.inicio # ajusta o contador em 0 contador = 0 # percorre todos os nós da lista ligada while no_atual != None: # incrementa o contador contador = contador + 1 # avança para o próximo nó da lista no_atual = no_atual.get_proximo() # retornamos a quantidade de nós return contador # método que permite inserir um novo nó no meio de uma lista ligada, # ou seja, em qualquer posição da lista encadeada ou, melhor ainda, E agora o código main() que insere alguns valores no início e no final da nossa lista singularmente encadeada e testa o método inserir_posicao_n(): # importa a classe ListaLigadaSimples from lista_singularmente_ligada import ListaLigadaSimples # método principal def main(): # cria uma nova lista encadeada simples lista = ListaLigadaSimples() print("Insere o valor 12 no início da lista") lista.inserir_inicio(12) print("Conteúdo da lista: ") lista.exibir() print("Insere o valor 20 no final da lista") lista.inserir_final(20) print("Conteúdo da lista: ") lista.exibir() print("Insere o valor 87 no início da lista") lista.inserir_inicio(87) Ao executar este código Python nós teremos o seguinte resultado: c:\estudos_python>python estudos.py Insere o valor 12 no início da lista Conteúdo da lista: 12 Insere o valor 20 no final da lista Conteúdo da lista: 12 20 Insere o valor 87 no início da lista Conteúdo da lista: 87 12 20 Insere o valor 9 no final da lista Conteúdo da lista: 87 12 20 9 Insere o valor 50 no índice 2 da lista Conteúdo da lista: 87 12 50 20 9 |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
Java - Exercícios Resolvidos de Java - Como calcular e exibir os 50 primeiros números primos em Java LISP - Como converter Coordenadas Cartesianas para Coordenadas Polares em LISP - LISP para Engenharia |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |