Отладчик — лучший друг программиста.
Метод Add из класса Node:
public void Add(T data)
{
var node=new Node<T>(data);
if (node.Data.CompareTo(Data) == -1)
// other code…
}
А теперь внимательно посмотрите на блок if и ответьте на 2 вопроса:
1) Какие значения сравниваются?
2) Какие значения должны сравниваться?
Метод CompareTo из класса Node
public int CompareTo(object? obj)
{
if(obj is Node<T> item)
{
return Data.CompareTo(item);
}
else
{
throw new ArgumentException("Типы не совпадают");
}
Какие типы данных Вы тут сравниваете?
P.S. По поводу интерфейса IComparable. Не совсем корректно сравнивать значение возвращаемое методом CompareTo на строгое равенство с 1/-1. Для int это будет работать, для других типов не факт. Почитайте внимательно описание интерфейса в документации.