Código (python) [Seleccionar]
class ListaEnlazada(object):
" Modela una lista enlazada, compuesta de Nodos. "
def __init__(self):
""" Crea una lista enlazada vacía. """
# prim: apuntará al primer nodo -None con la lista vacía
self.prim = None
# len: longitud de la lista - 0 con la lista vacía
self.len = 0
def __str__(self):
verLista(self.prim)
def __len__(self):
return self.len
def append(self,x):
if self.prim==None:
self.prim=x
else:
nodo=self.prim
while nodo.prox:
nodo=nodo.prox
nodo.prox=x
x.prox=None
self.len+=1
def insert(self,i,x):
if i ==self.len:
self.append(x)
elif (i==0):
x.prox=self.prim
self.prim=x
self.len+=1
elif (i<self.len and i>0):
nodo=self.prim
for j in range(i-1):
nodo=nodo.prox
x.prox=nodo.prox
nodo.prox=x
self.len+=1
else:
raise ValueError('Insercion en posicion fuera de rango')
def remove(self,x):
nodo=self.prim
notFound=True
if nodo==x:
print('Eliminado ',nodo)
self.prim=nodo.prox
self.len-=1
notFound=False
while nodo and notFound:
if nodo.prox.dato==x:
print('Eliminado ',nodo.prox)
temp=nodo.prox
nodo.prox=nodo.prox.prox
del(temp)
self.len-=1
notFound=False
if notFound:
raise ValueError('Nodo no encontrado')
def pop(self,i):
if i >self.len or i<=0:
raise ValueError('Pop en posicion fuera de rango')
return ''
if i==1:
x=self.prim
d=x.dato
self.prim=self.prim.prox
del(x)
self.len-=1
else:
for j in range(1,i):
if j==1:
nodo=self.prim
else:
nodo=nodo.prox
x=nodo.prox
d=x.dato
del(x)
nodo.prox=nodo.prox.prox
self.len-=1
return d
def index(self,x):
nodo=self.prim
notFound=True
i=1
if nodo.dato==x:
print('Encontrado ',nodo)
notFound=False
while nodo.prox and notFound:
if nodo.prox.dato==x:
print('Encontrado ',nodo.prox)
notFound=False
nodo=nodo.prox
i+=1
if notFound:
raise ValueError('Nodo no encontrado')
return i
#Clase Nodo
class Nodo(object):
def __init__(self, dato=None, prox = None):
self.dato = dato
self.prox = prox
def __str__(self):
return str(self.dato)
def __del__(self):
print('Destruido el objeto',self.dato)
# Funcion ara mostrar la Lista
def verLista(nodo):
""" Recorre todos los nodos a través de sus enlaces,
mostrando sus contenidos. """
nodoInicial=nodo
# cicla mientras nodo no es None o reciclado
primera=True
while nodo and (nodo!=nodoInicial or primera):
primera=False
# muestra el dato
print (nodo)
# ahora nodo apunta a nodo.prox
nodo = nodo.prox
lista=ListaEnlazada()
lista.append(Nodo('Membrillos'))
lista.append(Nodo('Peras'))
lista.append(Nodo('Manzanas'))
lista.append(Nodo('Mangos'))
lista.append(Nodo('Bananas'))
lista.append(Nodo('Fresas'))
verLista(lista.prim)