2017-06-26 2 views
0
def remove(self: 'LinkedList') -> None: 
    occur = self._last 
    if occur!= None: 
     occur = self._first 
    occur._first = None 

>>> lst = LinkedList([1, 2, 1, 3, 2, 1]) 
>>> lst.remove() 
>>> lst == LinkedList([2, 1, 3, 2, 1]) 

Tatsächliches Ergebnis: WahreEntfernen erstes Element in verlinkte Liste

Meine Ausgabe: Falsch

Im Versuch, das erste Element aus der Liste zu entfernen. Ich bin nicht sicher, ob meine Implementierung richtig

+0

Es tut mir leid, aber was ist Ihre Frage? –

+0

Ich habe meine Frage aktualisiert – TheGamer

+1

Aber Sie ** nur die Referenz von 'auftreten' **, die eine lokale Referenz ist. –

Antwort

0

Wenn Sie das erste Element einer verketteten Liste zu entfernen mögen, das bedeutet, dass ._first zum Sekunden Element in der Liste ab sofort beziehen.

Außerdem müssen Sie überprüfen, ob das ._last Element das ._first Element ist. Wenn dies der Fall ist, müssen Sie auch ._last auf None setzen, da in diesem Fall die Liste nur ein Element enthält.

So können Sie tun dies mit:

def remove_head (self: 'LinkedList') -> None: 
    # check if the list is not empty 
    if self._first is not None: 
     # check if first and last refer to the same node 
     if self._last is self._first: 
      # if so the list contains one node, so set _last to None 
      self._last = None 
     # update the pointer to the _first element to advance one hop 
     self._first = self._first._next 

ich hier machte die Annahme, dass der Verweis auf den nächsten Knoten in einem Knoten _next genannt wird. Aber das kannst du leicht ändern. Sie sollten auch Ihre Funktion mit aussagekräftigeren Namen wie remove_head benennen.