class ListNode
{
public object Data { get; private set; }
public ListNode Next { get; set; }
public ListNode(object Element)
{
Data = Element;
}
public ListNode(object Element, ListNode NextNode)
{
Data = Element;
Next = NextNode;
}
public ListNode()
{
}
}
class LinkedList
{
ListNode first;
ListNode last;
public LinkedList()
{
first = null;
last = null;
}
public ListNode Find(object After)
{
ListNode current = new ListNode();
current= first;
while (current.Data != After)
current = current.Next;
return current;
}
public void Add(object newItem, object After)
{
ListNode current=new ListNode();
ListNode newNode=new ListNode();
current = Find(After);
newNode.Next = current.Next;
current.Next = newNode;
}
public void InsertAtFront(object Element)
{
if (IsEmpty())
{
first = last = new ListNode(Element);
}
else
{
first = new ListNode(Element,first);
}
}
bool IsEmpty()
{
return first == null;
}
public void Display()
{
ListNode current = first;
while (current!=null)
{
Console.WriteLine(current.Data);
current = current.Next;
}
}
}
我实现了 Add After 特定元素的 Find 方法,但是当我调试它时,它显示对象引用未设置为对象异常的实例。请指出我在 Find 方法或 Add After 方法中的错误。谢谢
最佳答案
current= first;
while (current.Data != After)
可能会导致潜在的空引用问题。首先仍然可以在构造函数初始化时设置为 null,这意味着 current = null,然后会导致 null.Data,这将引发 null 引用异常。
这将解决 Find() 中的空引用问题
while (current != null && current.Data != After)
修复此问题将导致返回 null,这仍会导致 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);
这将使它可行,但我强烈建议阅读链接列表的实现或使用系统集合之一,因为此实现有很多潜在的问题。
关于c# - 如何在链表中添加方法工作后的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837513/