1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct Node {
5 int data;
6 struct Node *next;
7 }SList;
8
9 int SList_Create(SList **p/**out*/) {
10 int data = 0;
11 int ret = 0;
12 SList *pHead = NULL;
13 SList *node = NULL;
14 SList *tmp = NULL;
15 pHead = (SList *)malloc(sizeof(SList));
16 if(pHead == NULL) {
17 ret = -1;
18 printf("SList_Create erro\n");
19 goto End;
20 }
21 tmp = pHead;
22 printf("请输入一个整数数据\n");
23 scanf("%d", &data);
24 while(data != -1) {
25 node = (SList *)malloc(sizeof(SList));
26 if(node == NULL) {
27 ret = -1;
28 printf("SList_Create erro\n");
29 goto End;
30 }
31 node->data = data;
32 tmp->next = node;
33 tmp = node;
34 printf("请输入一个整数数据\n");
35 scanf("%d", &data);
36 }
37 node->next = NULL;
38 *p = pHead;
39 End:
40 if(ret != 0) {
41 if(pHead != NULL) {
42 free(pHead);
43 pHead = NULL;
44 }
45 if(node != NULL) {
46 free(node);
47 node = NULL;
48 }
49 }
50 return ret;
51 }
52
53 void print_List(SList *pHead) {
54 SList *pTmp;
55 if(pHead == NULL || pHead->next == NULL) {
56 printf("SList is NULL\n");
57 }
58 pTmp = pHead;
59 while(pTmp->next) {
60 printf("%d ", pTmp->next->data);
61 pTmp = pTmp->next;
62 }
63 }
64
65 int insert_List(SList *pHead/**in*/, int targetNum, int insertNum) {
66 int ret = 0;
67 SList *pPre = NULL;
68 SList *pCur = NULL;
69 SList *pNode = NULL;
70 if(pHead == NULL || pHead->next == NULL) {
71 ret = -1;
72 printf("insert_List erro\n");
73 return ret;
74 }
75 pCur = pHead->next;
76 pPre = pHead;
77 pNode = (SList *)malloc(sizeof(SList));
78 if(pNode == NULL) {
79 ret = -1;
80 printf("insert_List erro\n");
81 return ret;
82 }
83 pNode->data = insertNum;
84 while(pCur) {
85 if(pCur->data == targetNum) {
86 break;
87 }else {
88 pPre = pCur;
89 pCur = pCur->next;
90 }
91 }
92 pNode->next = pCur;
93 pPre->next = pNode;
94 return ret;
95 }
96
97 int delete_List(SList *pHead, int deleteNum) {
98 int ret = 0;
99 SList *pPre = NULL;
100 SList *pCur = NULL;
101 if(pHead == NULL || pHead->next == NULL) {
102 ret = -1;
103 printf("delete_List erro\n");
104 return ret;
105 }
106 pPre = pHead;
107 pCur = pHead->next;
108 while(pCur) {
109 if(pCur->data == deleteNum) {
110 break;
111 }else {
112 pPre = pCur;
113 pCur = pCur->next;
114 }
115 }
116 if(pCur == NULL) {
117 ret = -2;
118 printf("not exist this num");
119 return ret;
120 }
121 pPre->next = pCur->next;
122 pCur->next = NULL;
123 if(pCur != NULL) {
124 free(pCur);
125 }
126 return ret;
127 }
128
129 void destory_List(SList **p) {
130 SList *pHead = NULL;
131 SList *tmp = NULL;
132 if(p == NULL || *p == NULL) {
133 return;
134 }
135 pHead = *p;
136 while(pHead) {
137 tmp = pHead->next;
138 if(pHead != NULL) {
139 free(pHead);
140 }
141 pHead = tmp;
142 }
143 *p = NULL;
144 }
145
146 void reverse_List(SList *pHead) {
147 SList *pPre = NULL;
148 SList *pCur = NULL;
149 SList *pTmp = NULL;
150 if(pHead == NULL || pHead->next == NULL || pHead->next->next == NULL) {
151 return;
152 }
153 pPre = pHead->next;
154 pCur = pHead->next->next;
155 while(pCur) {
156 pTmp = pCur->next;
157 pCur->next = pPre;
158 pPre = pCur;
159 pCur = pTmp;
160 }
161 pHead->next->next = NULL;
162 pHead->next = pPre;
163 }
164
165 int main() {
166 int ret = 0;
167 SList *node1 = NULL;
168 ret = SList_Create(&node1);
169 if(ret) {
170 printf("create list erro\n");
171 }
172 print_List(node1);
173 printf("\n insert_List\n");
174 insert_List(node1, 20, 19);
175 print_List(node1);
176 printf("\n delete_List\n");
177 delete_List(node1, 19);
178 print_List(node1);
179 printf("\n reverse_List\n");
180 reverse_List(node1);
181 print_List(node1);
182 printf("\n destory_List\n");
183 destory_List(&node1);
184 system("pause");
185 return 0;
186 }