current= first;
while (current.Data != After)
может привести к потенциальной проблеме с нулевой ссылкой.first по-прежнему может быть установлен в null из инициализации конструктора, что будет означать, что current = null, что в результате приведет к null.Data, которая выдаст исключение нулевой ссылки.
Это исправит проблему нулевой ссылки в Find ()
while (current != null && current.Data != After)
Исправление приведет к возвращению нулевого значения, что все равно приведет к проблемам в Add
current = Find(After);
newNode.Next = current.Next;
current.Next = newNode;
В этом контексте LinkedList
сначала инициализируется, current = Find(After)
будет означать current = null, вызывая другие исключения нулевой ссылки в следующих двух строках.
public void Add(object newItem, object After)
{
if (IsEmpty())
{
InsertAtFront(newItem);
return;
}
ListNode newNode = new ListNode();
ListNode current = Find(After);
newNode.Next = current.Next;
current.Next = newNode;
}
Это исправит методы Add
и Find
для использования в виде:
LinkedList list = new LinkedList();
list.InsertAtFront("test");
list.Find(list.first.Data);
list.Add("test2", ll.first.Data);
Это сделает его работоспособным, но я бы, однако,Настоятельно рекомендуем ознакомиться с реализацией связанных списков или использовать один из системных наборов, поскольку у этой реализации довольно много потенциальных проблем.