C#()中结构的链表实现

时间:2015-12-02 15:31:22

标签: c# linked-list

我在C#中实现链接列表,所以我使用两种方法

第一种方法

 unsafe public struct Node
        {
            public int info;
            public Node* link;
        }

这是添加节点方法

public void AddNode( int  a)
        {
            Node temp = new Node();
            temp.info = a;
               if (Head == null)
               {
                  Head = Current = &temp;        
               }
            else
            {
                    (*Current).link = &temp;  
                     Current = &temp; 
                }                                         
            }

当我运行此代码它不保存内存意味着它创建Node temp = new Node();结构的实例,只要它在AddNode内部它的内存是保存但是当我使用 Head <在此方法之外打印它时/ strong>它给我NullRefrenceException

第二种方法

使用类和对象

    public class Node
        {
            public int info;
            public Node link;
        }
        class Linked_list
        {
           public Node Head;
           public Node Current;



            public void insert_element_linkedlist( int  a)
            {
                Node temp = new Node();
                temp.info = a;
                   if (Head == null)
                   {
                      Head = Current = temp;        
                   }
                else
                {
                        Current.link = temp;  
                         Current = temp; 
                    }                                         
                } 
}

第二种方法工作正常意味着临时节点Node temp = new Node();的每个实例都保存在内存中。

问题: 为什么它不保存结构实例?

对不起,我的子标准英语。

1 个答案:

答案 0 :(得分:1)

作为value type的结构实例在堆栈上创建,所以当AddNode返回时,它会被清理掉,并留下指向内存中随机位置的指针。简单地创建指向变量的指针不足以使其保持活跃状态​​。