用C#结构实现链表()

本文关键字:链表 实现 结构 | 更新日期: 2023-09-27 18:25:19

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

当我运行此代码时,它不保存内存意味着只要它在AddNode内,它就会创建Node temp = new Node();结构的实例。它的内存是保存的,但当我使用Head在该方法外部打印它时,它会给我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();的每个实例都保存在内存中。

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

对不起,我的英语不符合标准。

用C#结构实现链表()

结构实例是一种值类型,在堆栈上创建,因此当AddNode返回时,它会被清除,并且留下指向内存中随机位置的指针。仅仅创建一个指向变量的指针是不足以使其保持活力的。