J'ai les classes génériques suivantes (Node et Liste basée sur les Nodes) :
public class Node<T>
{
private T info;
private Node<T> next;
public Node(T x, Node<T> next)
{
this.info = x;
this.next = next;
}
public Node<T> GetNext()
{
return this.next;
}
public void SetNext(Node<T> next)
{
this.next = next;
}
public T GetInfo()
{
return this.info;
}
public void SetInfo(T x)
{
this.info = x;
}
public override string ToString()
{
return this.info.ToString();
}
}
public class List<T>
{
private Node<T> first;
public List()
{
this.first = null;
}
public Node<T> GetFirst()
{
return this.first;
}
public Node<T> Add(Node<T> pos, T x)
{
Node<T> temp = new Node<T>(x, null);
if (pos == null)
{
temp.SetNext(this.first);
this.first = temp;
}
else
{
temp.SetNext(pos.GetNext());
pos.SetNext(temp);
}
return temp;
}
public Node<T> Remove(Node<T> pos)
{
if (this.first == pos)
this.first = pos.GetNext();
else
{
Node<T> prevPos = this.GetFirst();
while (prevPos.GetNext() != pos)
prevPos = prevPos.GetNext();
prevPos.SetNext(pos.GetNext());
}
Node<T> nextPos = pos.GetNext();
pos.SetNext(null);
return nextPos;
}
public override string ToString()
{
string str = "[";
Node<T> pos = this.first;
while (pos != null)
{
str += pos.GetInfo().ToString();
if (pos.GetNext() != null)
str += ", ";
pos = pos.GetNext();
}
str += "]";
return str;
}
}
Ce que je veux faire, c'est deux fonctions en classe pour la classe List. - La première fonction fera la somme de tous les nombres de la liste qui sont en position paire. - La deuxième fonction vérifiera si la liste est triée par ordre alphabétique.
Ce que j'ai fait :
public int SumElementsOnEven()
{
int sum = 0;
Node<T> pos = this.first;
while (pos != null)
{
sum += int.Parse(pos.GetInfo().ToString());
pos = pos.GetNext().GetNext();
}
return sum;
}
public bool isAlpha()
{
Node<T> pos = this.first;
while (pos != null)
{
string a = pos.GetInfo().ToString();
string b = pos.GetNext().GetInfo().ToString();
if (a[0] < b[0])
return false;
pos = pos.GetNext();
}
return true;
}
Mais il renvoie une erreur dans les deux cas.
La référence de l'objet n'a pas été fixée à une instance d'un objet.
Dans l'endroit où je fais deux fois :
GetNext().GetNext();
Cela permet de sauter un élément de plus. Et la deuxième erreur à cet endroit :
string b = pos.GetNext().GetInfo().ToString();
Parce que je veux comparer deux éléments. En fait, c'est comme sauvegarder une référence à partir d'une référence ou peut-être que je me trompe ? Quoi qu'il en soit, comment puis-je résoudre ce problème ?