Crearea listei/clasei de noduri Python (Programare, Python)

SagittariusA a intrebat.

Ca exercițiu, aș dori să îmi creez propria clasă nod/listă. Oricum nu înțeleg cum se adaugă un nod la listă…iată codul meu:

class Node:
    def __init__(self, value):
        self.element = value
        self.nextEl = None

    def getEl(self):
        return self.element

    def getNext():
        return self.nextEl

class List:
    def __init__(self, fnode):
        self.firstNode = fnode

    def add(self, newNode):

    def printList(self):
        temp = self.firstNode
        while (temp != None):
            print temp.element
            temp = temp.nextEl

1 răspunsuri
Martijn Pieters

Trebuie să găsești ultimul nod fără un .nextEl pointer și să adăugați nodul acolo:

def add(self, newNode):
    node = self.firstNode
    while node.nextEl is not None:
        node = next.nextEl
    node.nextEl = newNode

Deoarece acest lucru trebuie să traverseze întreaga listă, majoritatea implementărilor de liste legate păstrează și o referință la ultimul element:

class List(object):
    first = last = None

    def __init__(self, fnode):
        self.add(fnode)

    def add(self, newNode):
        if self.first is None:
            self.first = self.last = newNode
        else:
            self.last.nextEl = self.last = newNode

Deoarece Python atribuie la mai multe ținte de la stânga la dreapta, self.last.nextEl este setată la newNode înainte de self.last.

Câteva note de stil pentru codul dumneavoastră:

  • Utilizați is None și is not None pentru a testa dacă un identificator indică spre None (este un singleton).
  • Nu este nevoie de accesori în Python; trimiteți direct la atribute.
  • Cu excepția cazului în care nu este vorba de Python 3, utilizați clase de tip nou prin moștenirea din object:

    class Node(object):
        # ...
    

Comentarii

  • Vă mulțumim! Foarte util! Și în cazul în care aș vrea să adaug un nod nu la sfârșit, ci la mijloc sau într-o poziție arbitrară? –  > Por SagittariusA.
  • @user1576208: newNode.nextEl, someNode.nextEl = someNode.nextEl, newNode inserează un nod înainte de someNode. –  > Por Martijn Pieters.

Tags: