链表特点(单链表 双链表)

优点:插入和删除非常快。因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作。

缺点:当需要查找某一个节点的时候就需要一个节点一个节点去访问,这样所花的时候就比较多了。(顺序表可以弥补这缺点,但插入和删除就非常耗性能)

 

单链表

单链表的构成:必须要有一个链表头(head),每个节点里面有一个Next用于指向下一个节点(类似于指针)。最后一个节点的Next为null来标识链表的尾。

 

如下图

C# 数据结构 - 单链表 双链表  环形链表

 

 

代码实现

 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 }
View Code

相关文章: