Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.750 ]
Homepage: http://ubuntu4free.wordpress.com
Vendo que muitos procuram como programar em Python, resolvi escrever este programa de lista ligada mostrando todas as vantagens da não instanciação dos tipos em Python, ajudando a poder usar qualquer tipo de dado dentro dessa lista. Estou usando duas classes, uma para o nó e outra para a estrutura da lista. Esse código é muito bom para iniciantes em Python. Uso o Python 3.1 para esse código.
#!/usr/bin/python3.1
#-*- utf-8 -*-
"""
Autor: Thiago Baldim
Objetivo: Lista ligada usando classes em Python
Descrição:
   Criar listas ligadas com funções para auxiliar sua manipulação, com
   metodos como inserir (insert), tamanho (size), retorna valor (findval)
   deletar (delete), imprime na tela (toprint), deleta tudo (dellall) e
   retorna em vetor (tovec)
"""
from nodelist import *
class Llist:   
   head = None
   tail = None
#<----------------------------------------------------------------------------->
   #Inserir qualquer tipo de valor
   def insert(self, val):
      item = Node(val, None)
      if self.head == None and self.tail == None:
         self.head = item
         self.tail = item
         item.setnext(None)
      else:
         item.setnext(None)
         self.tail.setnext(item)
         self.tail = item
#<----------------------------------------------------------------------------->
   #Tamanho retornando 0 se vazio
   def size(self):
      if self.head == None and self.tail == None:
         return 0
      else:
         walker = self.head
         count = 0
         while walker != None:
            walker = walker.getnext()
            count += 1
         return count
#<----------------------------------------------------------------------------->
   #Procura valor e retorna a posição da memória
   def findval(self, value):
      if self.head == None and self.tail == None:
         return None
      else:
         walker = self.head
         while walker != None:
            if walker.getvalue() == value:
               return walker
            walker = walker.getnext()
         return None
#<----------------------------------------------------------------------------->
   #Metodo sobrecarregado, retorna a posição da memória da cabeça da lista
   def findval(self):
      return self.head
#<----------------------------------------------------------------------------->
   #deleta valor, usando a busca e remove da memória
   def delete(self, value):
      todelete = self.findval(value)
      if todelete == self.head:
         self.head = todelete.getnext()
         del todelete
         return 1
      else:
         walker = self.head
         while walker != None:
            if walker.getnext() == todelete:
               walker.setnext(todelete.getnext())
               del todelete
               return 1
         return 0
#<----------------------------------------------------------------------------->
   #imprime valor, usa (end='') do python 3.1 para não pular linha
   def toprint(self):
      walker = self.head
      while walker != None:
         print(walker.getvalue(), ' ', end = '')
         walker = walker.getnext()
      print('')
#<----------------------------------------------------------------------------->
   #deleta todos os valor da lista e retorna 1 se foi feito com sucesso
   def delall(self):
      walker = self.head
      self.head = None
      while walker != None:
         toremove = walker
         walker = walker.getnext()
         del toremove
      return 1
#<----------------------------------------------------------------------------->
   #retorna um vetor(list)
   def tovec(self):
      walker = self.head
      vec = []
      while walker != None:
         vec.append(walker.getvalue())
         walker = walker.getnext()
      return vec
#Segunda classe classe node
#!/usr/bin/python3.1
#-*- utf-8 -*-
#classe node é a classe para definir os dados compostos na lista.
class Node:
   value = 0
   next = None
#<----------------------------------------------------------------------------->
   def __init__(self, value, next):
      self.value = value
      self.next = next
#<----------------------------------------------------------------------------->
   def setvalue(self, value):
      self.value = value
#<----------------------------------------------------------------------------->
   def setnext(self, next):
      self.next = next
#<----------------------------------------------------------------------------->
   def getvalue(self):
      return self.value
#<----------------------------------------------------------------------------->
   def getnext(self):
      return self.next
#<----------------------------------------------------------------------------->
Programa que resolve expressões matematicas
Usando for no shell do python =)
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









