Вы должны переписать ваше while
l oop и проверить curr.Next
для значения null
, в противном случае после завершения l oop вы получите null
как curr
значение
Node<T> curr = start;
while (curr.Next != null)
{
curr = curr.Next;
}
curr.Next = new Node<T>(value, curr.Next);
Кроме того, вы вставляете узел в конец списка без сравнения с существующими узлами. Это означает, что ваш список не отсортирован, несмотря на SortedLinkedList
имя класса.
Чтобы отсортировать список, вы должны сравнить значения одно за другим в while
l oop, чтобы найти правильное место для значение или вставьте его до конца, если место не найдено. Нечто подобное
var comparer = Comparer<T>.Default;
Node<T> curr = start;
var inserted = false;
while (curr.Next != null)
{
if (comparer.Compare(curr.Value, value) < 0 &&
comparer.Compare(curr.Next.Value, value) >= 0)
{
var previous = curr.Next;
curr.Next = new Node<T>(value, previous);
inserted = true;
break;
}
curr = curr.Next;
}
if (!inserted)
curr.Next = new Node<T>(value, curr.Next);