链表基础
1.概述:C#中泛型集合中的链表—LinkedList 是一个双向链表,其结点为LinkedListNode 结构 其中,结点结构包含:Next,Previous,Value三部分。且结点中值可以重复。
链表的插删要快于Link Link实质上是顺序型,可以用foreach。而链表不行!
2.链表的创建及初始化:
(1) LinkedList<类型> 链表名 = new LinkedList<类型> ();
(2) LinkedList<类型> 链表名 = new LinkedList<类型> (数组名);
注意:LinkedList<类型> 链表名 = new LinkedList<类型> () {值} ; 这样是错误的,因为LinkedList中元素应该是结点LinkedListNode 而不能是单纯的值!
- 链表结点的创建及初始化:
LinkedListNode<类型> 结点名 = new LinkedListNode<类型> (值);
//初建结点必须赋值,类型为只读型,不能修改前后的指向。
4.链表的基本操作:
(1) 取链表的首位元素:链表名.First 链表名.Last //返回为结点型
(2) 链表结点的前后移动:结点.Next 结点.Previous //返回为结点型
(3) 统计链表的长度:链表名.Count(); //()圆括号有没有都行
链表名.(LongCount()) //必须有圆括号
(4) 添加结点:
链表名.AddFirst(); //圆括号中为值或者是结点,添加在链表头
链表名.AddLast(); //参数同上,添加在链表尾
链表名.AddBefore(参数一:添加位置,为结点类型,参数二:添加元素,值或者是结点类型);
链表名.AddAfter(参数一:添加位置,为结点类型,参数二:添加元素,值或者是结点类型);
(5) 删除结点:
链表名.Remove(); //括号中值为链表中值,若该值存在于多个结点中,则只删除第一个。括号中值也可以为结点类型,但是要注意这个结点必须是从原链表中获取的,否则运行会出错
链表名.RemoveFirst(); //删除首结点,首结点会自动后移
链表名.RemoveLast(); //删除尾结点,尾结点会自动前移
(6) 查找结点值:返回值为布尔类型
链表名.Contain(); 括号内为结点的值,不能是结点
(7) 查找结点:返回值为结点类型
链表名.Find(); 括号内为结点的值,不能是结点。若有多个结点的值相同,只返回第一个
链表名.FindLast(); 与Find 相同只是从后往前找
(8) 在链表中,要想判断两个结点是否为同一个结点不能用==号,要使用 结点.Equals(结点);
(9) 链表清空: 链表名.Clear();