版权归作者所有,转载请注明出处
因为C#自带的链表有前驱和后驱,所以是双向链表。同时也是泛型。
链表的赋值与数组集合(比如List<>)是不一样的,数组是一片连续的存储空间,链表在内存中是离散的,在空间中并不连续,通过两个指针,一个指针指向上一个存储位置地址,一个指针指向下一个存储位置地址,将数据通过这种关联方式组织在一起。
链表插入、删除时效率高于数组:数组每在中间存一个值,后面的值都得向后挪移。链表因为存储位置的离散则不用,添加或删除仅仅改变指针的指向。
链表在查找时效率低于数组:链表只能通过Previous前驱、Next后驱去找到值,不能像数组通过索引直接拿到。链表只能遍历,所以时间复杂度O(n),数组为O(1)
1.双向列表类型变量的声明与引用新双向链表对象
2.添加头部值、尾部值的方法
AddFirst()添加头部值,即在链表的首部添加一个值,也同时会产生一个节点即位置,而这个方法会返回这个节点类型值,通过这个节点值就可以在其后或前添加新值。
AddLast()添加尾部值,即在链表的尾部添加一个值,也同时会产生一个节点即位置,而这个方法会返回这个节点类型值,通过这个节点值就可以在其后或前添加新值。
3.在节点前、节点后添加值
AddBefore()在节点前添加值
AddAfter()在节点后添加值
4.打印链表的长度、第一个值、最后一个值
l1.Count长度
l1.First.Value第一个值
l1.Last.Value最后一个值
5.打印前驱、后驱结点的值
node.Previous.Value前驱结点的值。需要注意的是首节点没有前驱,如果应用会报错。
node.Next.Value前驱结点的值。需要注意的是尾节点没有后驱,如果应用会报错。