朱嘉诚*_*朱嘉诚 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"复制所有链表元素?并且很难想象算法中发生了什么.
它看起来像是一个而不是一个链表,它是一个Big对象,里面有递归的同类
Node是a class,这意味着该字段Node next;是一个引用(在术语方面可广泛地与指针互换).所以没有:它绝对是一个链表.Node不包含一个Node.它包含一个字段,它是另一个字段的引用(思考:指针)Node.
是不是cur = head意味着"cur"复制所有链表元素?
它没有复制任何元素.它正在改变一些现有对象上的引用字段(思考:指针),就是这样.没有复制.它是,但是,访问所有元素,并改变他们所有的指针-所以,如果算上"复制引用(认为:指针)上的所有元素":肯定的是,它是这样做.没有任何分配,等等.