2016-04-17 4 views
1

Ich lerne gerade Cambridge Book von dataStructures und jedes Mal wenn ich über ein Problem nachdenke, bevor ich die Lösung sehe, versuche ich es zu lösen. Ich habe ein Problem mit RemoveLast()C# Arbeiten mit einer LinkedList DataStructure von Base

public void RemoveLast() 
     { 
      if (end != null) 
      { 
       Node runner = start; //if end != null then start is initialized. 
       while (runner != end) 
       { 
        runner = runner.Next; 
       } 
       runner.Next = null; 
       end = runner; 
      } 
     } 

Was ist das Problem in meinem Code? Danke Leute!

Antwort

1

Betrachten wir die Schleifenbedingung:

while (runner != end) 

Am Ende der Schleife, um runnerend gleich ist. Sie setzen also grundsätzlich end.Next auf null und setzen end auf sich.

Sie müssen an den Knoten direkt vor dem Knoten end gelangen.

die Schleife ändert Bedingung dazu:

while (runner.Next != end) 

Dadurch wird sichergestellt, dass am Ende der Schleife runner der Knoten genau vor dem end Knoten sein wird.

Bitte beachten Sie auch, dass dieser Code den Fall nicht behandelt, in dem start gleich end ist (wenn die verknüpfte Liste genau einen Knoten enthält).

+0

Verdammt, habe diesen nicht gesehen! Danke! – N3wbie

+0

Gern geschehen –