¿Cuál es el motivo del error al implementar la lista vinculada (lista vinculada) en la programación de Python y cómo solucionarlo?
¡Hola anfitrión!
Hay muchos problemas en tu código, déjame explicarlos uno por uno
1) Primero que nada, el error en tu código se debe a que quieres usar list para expandir tu Clase SLinkedList. En Python, excepto los objetos iterables integrados, todo lo demás debe implementar la función __iter__() para poder usar la lista para la expansión. Nota: Para determinar si un objeto es iterable, utilice isinstance(obj, Iterable) para determinar si obj es iterable. Iterable debe importarse de colecciones
2) Hay problemas graves con el método de inserción. Según el cartel original Si se inserta el método, debido a que el nodo principal siempre cambia, no podrá encontrar el nodo principal cuando necesite recorrer la lista vinculada;
3) También hay Problemas con la implementación del método pop, debido a que es una cadena unidireccional, por lo que no puede La eliminación comienza desde el nodo final, solo se puede eliminar el nodo principal
4) La intención del método superior Se desconoce
Otros:
Mi plan modificado se enumera a continuación y le puse la guinda al pastel. Cada operación básica devolverá un objeto de lista vinculada, por lo que se pueden realizar operaciones en cadena. se usa para escribir código; la función iterativa se implementa usando rendimiento para evitar ocupar memoria innecesaria durante la expansión.
Otro: cuando expando, tomo directamente los elementos de cada nodo en la lista vinculada y agrego algunos comentarios clave en el código; #?-*-?coding:?utf-8?-* -
clase?Nodo:
def?__init__(self):
'''
olmo: elemento de nodo
nxt: puntero del siguiente nodo
'''
self.elm,?self.nxt?=?Ninguno,?Ninguno
clase? SLinkedList:
def?__init__(self):
''
head:?Cabecera de la lista enlazada
end_point:? Fin de la lista enlazada
'''
self.head?=?None
self.end_point?=?None
def ?push(self,?x ):
p?=?Node()
p.elm?=?x
if?self.head? es?Ninguno:
self.head?=?p
self.end_point?=?p
return?self
self .end_point.nxt?=? p
self.end_point?=?p
retorno?self
def?pop(self):
'''porque lo que se implementa es una lista enlazada individualmente, por lo que el nodo solo se puede eliminar desde el principio'''
if?self.head.nxt?is?None: p>
retorno
self.head?=?self.head.nxt
retorno?self
def?__iter__(self): p>
temp_node?=?self.head
mientras?temp_node?is?not?Ninguno:
rendimiento?temp_node.elm
temp_node? =?temp_node.nxt
if?__name__?==?'__main__':
'''Agregue tres elementos 1, 2 y 5 y elimine un nodo principal'' '
¿mi lista de enlaces?=? SLinkedList().push(1).push(2).push(5).pop()
imprimir(lista(mi lista de enlaces)) p>
De hecho, el lenguaje Python usa listas enlazadas un poco. Es superfluo, pero no está de más si lo usas como una necesidad para practicar.
Espero adoptarlo, ¡gracias!