链表特点(单链表 双链表)
优点:插入和删除非常快。因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作。
缺点:当需要查找某一个节点的时候就需要一个节点一个节点去访问,这样所花的时候就比较多了。(顺序表可以弥补这缺点,但插入和删除就非常耗性能)
单链表
单链表的构成:必须要有一个链表头(head),每个节点里面有一个Next用于指向下一个节点(类似于指针)。最后一个节点的Next为null来标识链表的尾。
如下图
代码实现
1 /* ------------ 单链表 ------------- */ 2 //链表头 3 SingleLink head = new SingleLink(); 4 SingleLink node; 5 6 //添加节点 7 node = new SingleLink(1, "刘德华"); 8 SingleLink.Add(ref head, node); 9 10 node = new SingleLink(2, "张学友"); 11 SingleLink.Add(ref head, node); 12 13 node = new SingleLink(3, "郭富城"); 14 SingleLink.Add(ref head, node); 15 16 node = new SingleLink(4, "黎明"); 17 SingleLink.Add(ref head, node); 18 19 20 //删除节点 21 SingleLink.Remove(ref head, 2); 22 23 //遍历所有节点 24 SingleLink cursor = head; 25 while (cursor.Next != null) 26 { 27 Console.WriteLine(cursor.Next.ToString()); 28 cursor = cursor.Next; 29 } 30 31 32 /// <summary> 33 /// 单链表 34 /// </summary> 35 public class SingleLink 36 { 37 public int No { get; set; } 38 39 public string Name { get; set; } 40 41 //指向下一个节点(有点像指针) 42 public SingleLink Next { get; set; } 43 44 public SingleLink() { } 45 46 public SingleLink(int no, string name) 47 { 48 this.No = no; 49 this.Name = name; 50 } 51 52 53 /// <summary> 54 /// 添加 55 /// </summary> 56 /// <param name="head">链表头</param> 57 /// <param name="addNode">添加节点</param> 58 public static void Add(ref SingleLink head, SingleLink addNode) 59 { 60 SingleLink cursor = head; 61 while (cursor.Next != null) 62 { 63 cursor = cursor.Next; 64 } 65 cursor.Next = addNode; 66 } 67 68 69 /// <summary> 70 /// 删除 71 /// </summary> 72 /// <param name="head">链表头</param> 73 /// <param name="no">删除编号</param> 74 public static void Remove(ref SingleLink head, int no) 75 { 76 SingleLink cursor = head; 77 while (cursor.Next !=null) 78 { 79 if (cursor.Next.No == no) 80 { 81 cursor.Next = cursor.Next.Next; 82 return; 83 } 84 cursor = cursor.Next; 85 } 86 } 87 88 89 /// <summary> 90 /// 输入信息(重写ToString方法) 91 /// </summary> 92 /// <returns></returns> 93 public override string ToString() 94 { 95 return "No---> " + No + " Name---> " + Name; 96 } 97 }