est lié ici inversion itérative et récursive en .net (C#) (notez la liste chaînée est maintenant à la fois premier et dernier pointeurs afin que je puisse ajouter à la fin ou insérer à la tête dans O . (1) - on n'a pas à faire ce que je viens de définir mon comportement de liste chaînée comme ci-dessus)
public void ReverseIterative()
{
if(null == first)
{
return;
}
if(null == first.Next)
{
return;
}
LinkedListNode<T> p = null, f = first, n = null;
while(f != null)
{
n = f.Next;
f.Next = p;
p = f;
f = n;
}
last = first;
first = p;
}
récursive:
public void ReverseRecursive()
{
if (null == first)
{
return;
}
if (null == first.Next)
{
return;
}
last = first;
first = this.ReverseRecursive(first);
}
private LinkedListNode<T> ReverseRecursive(LinkedListNode<T> node)
{
Debug.Assert(node != null);
var adjNode = node.Next;
if (adjNode == null)
{
return node;
}
var rf = this.ReverseRecursive(adjNode);
adjNode.Next = node;
node.Next = null;
return rf;
}
alternativement vous pouvez utiliser la liste chaînée intégrée mais utiliser seulement les liens dans une direction, vous devriez vérifier avec votre tuteur si cela est acceptable si –
donc fondamentalement vous me dites que C# a réellement des pointeurs et ils sont déclarés avec un "_"? – BlackBear
N ° C# utilise des références qui sont similaires aux pointeurs (mais pas identiques). Les références sont suffisantes pour implémenter une liste chaînée, vous n'avez pas besoin de pointeurs. BTW, C# ** fait ** ont des pointeurs, mais ils ne sont presque jamais nécessaires et ne sont pas recommandés pour une utilisation normale –