c# - 如何在链表中添加方法工作后的内容?

标签 c# visual-studio-2010 data-structures linked-list

 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;
    }

这将修复 AddFind 方法,使其可以以下形式使用:

    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/

相关文章:

c# - 在托管代码中使用 win32

visual-studio-2010 - 复制表的 VS 2010 数据库部署

c++ - 有点复杂的 Visual Studio 解决方案中未解析的外部符号

java - 找到不匹配的括号的索引

algorithm - 解析表示为字符串的数字并返回满足斐波那契关系的数字数组

c# - 具有可空 double 的 Web 服务响应未正确反序列化

c# - 从数据集中的数据表中删除一行

c# - 处理 ClickOnce "Cannot Start Application"消息

java - 使用 HashMap 的稀疏数组

c# - .NET 加密字节数组