1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct node
5 {
6 int num;
7 struct node* next;
8 }node;
9
10 node *head = NULL;
11
12 node *make_node(int data)
13 {
14 node *p = (node *)malloc(sizeof(node));
15
16 if(p == NULL)
17 {
18 return NULL;
19 }
20 else
21 {
22 p -> num = data;
23 p -> next = NULL;
24 }
25 return p;
26 }
27
28 void insert_node_head(node *p)
29 {
30 p -> next = head;
31 head = p;
32 }
33
34 void insert_node_tail(node *p)
35 {
36 node *p1 = head;
37 node *end = NULL;
38 if(head == NULL)
39 {
40 head = p;
41 }
42 else
43 {
44 while(p1 -> next != NULL)
45 {
46 p1 = p1 -> next;
47 }
48 p1 -> next = p;
49 p1 = p;
50 p -> next = NULL;
51 }
52 }
53
54 void free_node(node *p)
55 {
56 free(p);
57 }
58
59 void traverse()
60 {
61 node *p = head;
62 if( p == NULL)
63 {
64 printf("no num/n");
65 }
66 while(p != NULL)
67 {
68 printf("%d ",p -> num);
69 p = p -> next;
70 }
71 printf("\n");
72 }
73
74 node *find(int n)
75 {
76 node *p = head;
77 while(p != NULL)
78 {
79 if(n == p -> num)
80 {
81 return p;
82 }
83 p = p -> next;
84 }
85 return NULL;
86 }
87
88
89 void rm_node(node *p)
90 {
91 if(p == head)
92 {
93 head = head -> next;
94 p -> next = NULL;
95 return;
96 }
97 else
98 {
99 node *pre = head;
100 while(pre != NULL)
101 {
102 if(pre -> next == p)
103 {
104 pre -> next = p -> next ;
105 p -> next = NULL;
106 return ;
107 }
108 pre = pre -> next;
109 }
110 }
111 }
112
113 void destory()
114 {
115 node *p = head ;
116 while(head != NULL)
117 {
118 head = head -> next;
119 free_node(p);
120 p = head;
121 }
122 }
123 int main()
124 {
125 node *p = make_node(1);
126 insert_node_tail(p);
127
128 p = make_node(3);
129 insert_node_tail(p);
130
131 p = make_node(5);
132 insert_node_tail(p);
133
134 p = make_node(7);
135 insert_node_tail(p);
136
137 traverse();
138
139 int a = 3;
140 p = find(3);
141 if(p == NULL)
142 {
143 printf("can not find num3\n");
144 }
145 else
146 {
147 printf("%d\n",p -> num);
148 }
149 destory();
150 traverse();
151 }