ich lerne ein wenig über verknüpfte Liste und doppelt verkettete Liste.C# doppelt verkettete Liste - vorherige und nächste wird nicht verbinden
Ich habe versucht, eine doppelte verkettete Liste mit vorherigen und nächsten Knoten zu erstellen, aber wenn ich das Programm debuggen die "Zeiger" nicht miteinander an den Orten verbinden, wo sie sollen. Am Ende des Laufs des Programms ist der einzige Ausdruck, der ausgedruckt wird, der letzte Wert, den ich in die Liste eingeben wollte, die der EINZIGE Wert in der Liste war.
Dies ist mein Code, ich glaube, es sollte in Ordnung sein, außer für das Problem, wo die 'vorherigen' und die 'nächsten' Knoten nicht miteinander verbunden werden.
Node<T> start;
Node<T> end;
public void AddFirst(T dataToAdd)
{
Node<T> tmp = new Node<T>(dataToAdd);
if (start == null)
{
start = tmp;
end = start;
}
tmp.next = start.previous;
end.next = tmp.previous;
start = tmp;
if (start.next == null)
{
end = start;
}
}
public void AddLast(T dataToAdd)
{
Node<T> tmp = new Node<T>(dataToAdd);
if (start == null)
{
AddFirst(dataToAdd);
}
tmp.next = start.previous;
end.next = tmp.previous;
end = tmp;
}
public T RemoveFirst()
{
if (start == null) return default(T);
T saveVal = start.data;
end.next = start.next.previous;
start = start.next;
if (start == null) end = null;
return saveVal;
}
public T RemoveLast()
{
if (start == null) return default(T);
T saveVal = end.data;
end.previous.next = start.previous;
end = end.previous;
if (start == null) end = null;
return saveVal;
}
public void PrintAll()
{
Node<T> tmp = start;
while (tmp != null)
{
Console.WriteLine(tmp.data);
tmp = tmp.next;
}
}
class Node<T>
{
public T data;
public Node<T> next;
public Node<T> previous;
//etc
public Node(T newData)
{
data = newData;
next = null;
previous = null;
}
}
}
[Double verlinkte Liste C#] (https://gist.github.com/yetanotherchris/4960171) – CodingYoshi
Ich glaube, Sie sollten einige Komponententests für Ihren Code zu schreiben versuchen, und einen Teil des Codes hinzufügen bei eine Zeit. Insbesondere frage ich, warum 'end.next = tmp.previous;' überhaupt da ist oder mindestens ** zu dieser Zeit **. –
@CodingYoshi Danke! Ich werde deinem Beispiel folgen und prüfen, was ich falsch gemacht habe! – Dolev