У меня возникает ошибка
Ссылка на объект не указывает на экземпляр объекта
в методе Add() класса SortedLinkedList. Я хочу сравнить элемент любого типа с другим элементом этого же типа, предполагается, что типы будут либо инт, либо дабл, либо строки. Мне пришлось вместо оператора < пользоваться методом CompareTo().Поскажите как в моем случае без ошибок можно сравнить данные двух узлов, учитвыая то, что они одного и того же типа. Если пользоваться методом CompareTo(), то подскажите как это делать без ошибок.
public class Node<D>
{
public D Data { get; set; }
public Node(D data)
{
Data = data;
}
public Node<D> Next { get; set; }
}
public class SortedLinkedList<D> where D: IComparable
{
Node<D> head; // first element
Node<D> tail; // last element
int count = 0;
public int Count {get { return count; } set { count = value; } }
public bool IsEmpty() { return count == 0; }
public void PrintList()
{
Node<D> current = head;
string result = "";
while (current != null)
{
result += current.Data;
result += ", ";
current = current.Next;
}
Console.WriteLine(result);
}
public void Add(D Data)
{
Node<D> node = new Node<D>(Data);
if (head == null) // if the list is empty
{
head = node; // then we're about to fill the first slot.
}
else
{
Node<D> current = head;
Node<D> previous = null;
while (current.Data.CompareTo(node.Data) < 0)
{
previous = current;
current = current.Next;
}
previous.Next = node;
node.Next = current;
}
count++;
}
class Program
{
static void Main(string[] args)
{
SortedLinkedList<int> A = new SortedLinkedList<int>();
int[] s = { 1, 2, 3, 4, 5, 7, 8, 9 };
for (int i = 0; i < s.Length; i++)
{
A.Add(s[i]);
}
A.PrintList();
Console.ReadKey();
}
}
while (current.Data.CompareTo(node.Data) < 0)
{
previous = current;
current = current.Next;
}
В этом цикле у вас current может стать равным null(если вы добавляете значение в конец списка, то есть добавляете самый "большой" элемент по сравнению с теми, который уже есть в списке) и вы получите эту ошибку. Поэтому вы должны добавить дополнительную проверку на null для current
while (current != null && current.Data.CompareTo(node.Data) < 0)
{
previous = current;
current = current.Next;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей