Сравнение вершин в связном сортированном списке C#
Имеется класс вершины связного сортированного списка, реализованный на языке C#
class Node<T>
{
public T data = default(T);
public T Data
{
get { return data; }
set
{
if (value != null)
{
data = value;
}
else
{
throw new ArgumentNullException(nameof(value));
}
}
}
public Node<T> Next { get; set; }
public Node(T data)
{
Data = data;
}
public override string ToString()
{
return Data.ToString();
}
}
Так же есть класс самого списка, но по факту он не является отсортированным. Хочу внести изменения в метод AddElement, чтобы список оставался отсортированным, но не понимаю как мне сравнивать значения вершин.
class LinkedSortedList<T>
{
public Node<T> Head { get; set; }
public Node<T> Tail { get; set; }
public int Count { get; set; }
public LinkedSortedList()
{
Head = null;
Tail = null;
Count = 0;
}
public LinkedSortedList(T data)
{
CreateList(data);
}
public void AddElement(T data)
{
if (Tail != null)
{
var node = new Node<T>(data);
Tail.Next = node;
Tail = node;
Count++;
}
else
{
CreateList(data);
}
}
public void CreateList(T data)
{
var node = new Node<T>(data);
Head = node;
Tail = node;
Count = 1;
}
}
Прошу помочь со сравнением вершин, что использовать IComparable, Comparer или что-то другое и каким образом?
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
Добавьте constraint where T : IComparable<T>, тогда можно будет вызывать t1.CompareTo(t2) для значений типа T.
Node curr = Head;
while (curr != null && curr.Data.CompareTo(data) < 0)
curr = curr.Next;
// позицию нашли, дальше вставка
var prev = curr != null ? curr.Prev : Tail;
var node = new Node(data) { Prev = prev, Next = curr };
if (curr != null)
curr.Prev = node;
else
Tail = node;
if (prev != null)
prev.Next = node;
else
Head = node;
Count++;