C#内存分配和链接列表实现

朱嘉诚*_*朱嘉诚 2 c# memory algorithm memory-management linked-list

我对C#如何实现链表类的第一个问题有一些疑问:

public class Node {  
    int data;  
    Node next;   
} 
Run Code Online (Sandbox Code Playgroud)

它看起来像是一个而不是一个链表,它是一个Big对象,里面有递归的同类

我的第二个问题更具体,对于一个简单的反向链表算法,如下所示:

 public void ReverseList(ref ListNode head){
    if(head ==null || head.next == null) return head;
    ListNode cur = head;
    ListNode prev = null;
    ListNode next = head.next;
    while (cur != null){
        ListNode nextNode = head.next;
        cur.next= prev;
        prev=cur;
        cur=nextNode;
    }
    head = prev ;
} 
Run Code Online (Sandbox Code Playgroud)

是不是cur = head意味着"cur"复制所有链表元素?并且很难想象算法中发生了什么.

Mar*_*ell 6

它看起来像是一个而不是一个链表,它是一个Big对象,里面有递归的同类

Node是a class,这意味着该字段Node next;是一个引用(在术语方面可广泛地与指针互换).所以没有:它绝对是一个链表.Node包含一个Node.它包含一个字段,它是另一个字段的引用(思考:指针)Node.

是不是cur = head意味着"cur"复制所有链表元素?

它没有复制任何元素.它正在改变一些现有对象上的引用字段(思考:指针),就是这样.没有复制.它是,但是,访问所有元素,并改变他们所有的指针-所以,如果算上"复制引用(认为:指针)上的所有元素":肯定的是,它是这样做.没有任何分配,等等.