CS4L10——LinkedList
本章代码关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   |  LinkedList<>                     linkedList<>.AddLast()             linkedList<>.AddFirst()             linkedList<>.Find()                 linkedList<>.AddAfter()             linkedList<>.AddBefore()         linkedList<>.RemoveFirst()         linkedList<>.RemoveLast()         linkedList<>.Remove()             linkedList<>.Clear()             linkedList<>.First                 linkedList<>.Last                 linkedList<>.Contains()            
  LinkedListNode<>                 linkedListNode<>.Value             linkedListNode<>.Next             linkedListNode<>.Previous        
 
  | 
 
LinkedList<>
LinkedList<> 是一个C#为我们封装好的类,它的本质是一个可变类型的泛型双向链表
使用 LinkedList<> 需要引用 System.Collections.Generic 这个命名空间
实例化一个 LinkedList<> 必须要指明它要装载什么类型的元素
1 2 3 4 5 6 7 8 9 10
   | using System.Collections.Generic;
  class Program {     static void Main(string[] args)     {         LinkedList<int> linkedList = new LinkedList<int>();         LinkedList<string> linkedList2 = new LinkedList<string>();     } }
   | 
 
链表对象 需要掌握两个类,一个是链表本身、一个是链表节点类 LinkedListNode
增删查改
增
在链表尾部添加元素
1 2
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10);
   | 
 
在链表头部添加元素
1 2
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddFirst(20);
   | 
 
在某一个节点后添加一个节点
要指定节点,则需要先得到一个节点
获取指定值的节点
1
   | LinkedListNode<int> node = linkedList.Find(20);
   | 
 
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddFirst(20); LinkedListNode<int> node = linkedList.Find(20); linkedList.AddAfter(node, 15);
   | 
 
在某一个节点前添加一个节点
要指定节点,则需要先得到一个节点
1 2 3 4 5
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); LinkedListNode<int> node = linkedList.Find(20); linkedList.AddBefore(node, 11);
   | 
 
删
移除头节点
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); linkedList.RemoveFirst();
   | 
 
移除尾节点
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); linkedList.RemoveLast();
   | 
 
移除指定节点
无法通过位置直接移除,只能通过节点的值移除
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); linkedList.Remove(20);
   | 
 
清空
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); linkedList.Clear();
   | 
 
查
获取头节点
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); LinkedListNode<int> firstNode = linkedList.First;
   | 
 
获取尾节点
1 2 3 4 5
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); LinkedListNode<int> firstNode = linkedList.First; LinkedListNode<int> lastNode = linkedList.Last;
   | 
 
获取指定值的节点
无法通过下标获取中间元素,只能遍历查找指定位置元素,当指定值不存在于链表里时,会返回 null (空)
1 2 3 4
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); LinkedListNode<int> node = linkedList.Find(20);
   | 
 
获取节点的值
1 2 3 4 5
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(10); linkedList.AddFirst(20); LinkedListNode<int> firstNode = linkedList.First; Console.WriteLine(firstNode.Value);
   | 
 
输出:
判断是否存在
1 2 3 4 5 6
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(1); if (linkedList.Contains(1)) {     Console.WriteLine("链表中存在1"); }
   | 
 
输出
改
要先得再改,得到需要改的节点,再改变其中的值
1 2 3 4 5
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddFirst(20); Console.WriteLine(linkedList.First.Value); linkedList.First.Value = 10; Console.WriteLine(linkedList.First.Value);
   | 
 
输出:
遍历
foreach 遍历
1 2 3 4 5 6 7 8 9
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(1); linkedList.AddLast(2); linkedList.AddLast(3); linkedList.AddLast(4); foreach (int value in linkedList) {     Console.WriteLine(value); }
   | 
 
输出:
通过节点遍历
从头遍历到尾,需要获取下一个节点的属性:
1 2 3 4 5 6 7 8 9 10 11
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(1); linkedList.AddLast(2); linkedList.AddLast(3); linkedList.AddLast(4); LinkedListNode<int> nowNode = linkedList.First; while (nowNode != null) {     Console.WriteLine(nowNode.Value);     nowNode = nowNode.Next; }
   | 
 
输出:
从尾到头:
1 2 3 4 5 6 7 8 9 10 11
   | LinkedList<int> linkedList = new LinkedList<int>(); linkedList.AddLast(1); linkedList.AddLast(2); linkedList.AddLast(3); linkedList.AddLast(4); LinkedListNode<int> nowNode = linkedList.Last; while (nowNode != null) {     Console.WriteLine(nowNode.Value);     nowNode = nowNode.Previous; }
   | 
 
输出: