1 <details>
2 <summary>点击查看代码</summary>
3
4 ```
5 #include <string>
6 #include <iostream>
7 using namespace std;
8
9 typedef int DataType;
10
11 class Node
12 {
13 public:
14 DataType data;
15 Node *next;
16 };
17
18 class LinkList
19 {
20 public:
21 LinkList();
22 ~LinkList();
23 int CreateLinkList(int size);
24 int BYELinkList();
25 int TravalLinkList();
26 int InsertLinklList(Node *data, int n);
27 int DeleteLinklist(int n);
28
29 int GetLen();
30 bool IsEmply();
31
32 Node *head;
33 int size;
34 };
35
36 LinkList::LinkList()
37 {
38 head = new Node;
39 head->data = 0;
40 head->next = NULL;
41 size = 0;
42 }
43
44 LinkList::~LinkList()
45 {
46 delete head;
47 }
48
49 int LinkList::CreateLinkList(int n)
50 {
51 if (n<0) {
52 printf("error\n");
53 return -1;
54 }
55 Node *ptemp = NULL;
56 Node *pnew = NULL;
57
58 this->size = n;
59 ptemp = this->head;
60 for(int i =0 ; i<n ; i++)
61 {
62 pnew = new Node;
63 pnew->next = NULL;
64 cout << "输入第" << i+1 << "个节点值" << endl;
65 cin >> pnew->data;
66 ptemp->next = pnew;
67 ptemp = pnew;
68 }
69 cout << "创建完成" << endl;
70 return 0;
71 }
72
73 int LinkList::BYELinkList()
74 {
75 Node *ptemp;
76 if (this->head == NULL) {
77 cout << "链表原本就为空" << endl;
78 return -1;
79 }
80 while (this->head)
81 {
82 ptemp = head->next;
83 free(head);
84 head = ptemp;
85 }
86 cout << "销毁链表完成" << endl;
87 return 0;
88 }
89
90 int LinkList::TravalLinkList()
91 {
92 Node *ptemp = this->head->next;
93 if (this->head == NULL) {
94 cout << "链表为空" << endl;
95 return -1;
96 }
97 while(ptemp)
98 {
99 cout << ptemp->data << "->";
100 ptemp = ptemp->next;
101 }
102 cout <<"NULL"<< endl;
103 return 0;
104 }
105
106 int LinkList::InsertLinklList(Node *data, int n)
107 {
108 Node *ptemp;
109 if (this->head == NULL) {
110 cout << "链表为空" << endl;
111 return -1;
112 }
113 if (data == NULL) {
114 cout << "插入节点为空" << endl;
115 return -1;
116 }
117 //头插
118 if (n<2) {
119 Node *pnew = new Node;
120 pnew->data = data->data;
121 pnew->next = this->head->next;
122 this->head->next = pnew;
123 this->size++;
124 return 0;
125 }
126 //尾插
127 if (n > this->size) {
128 ptemp = this->head;
129 while (ptemp->next != NULL) {
130 ptemp = ptemp->next;
131 }
132 Node *pnew = new Node;
133 pnew->data = data->data;
134 pnew->next = NULL;
135 ptemp->next = pnew;
136 this->size++;
137 return 0;
138 }
139 //中间插
140 else {
141 ptemp = this->head;
142 for (int i = 1; i < n; i++) {
143 ptemp = ptemp->next;
144 }
145 Node *pnew = new Node;
146 pnew->data= data->data;
147 pnew->next = ptemp->next;
148 ptemp->next = pnew;
149 this->size++;
150 return 0;
151 }
152 }
153
154 int LinkList::DeleteLinklist(int n)
155 {
156 Node *ptemp;
157 Node *ptemp2;
158 if (n > this->size) {
159 cout << "n太大" << endl;
160 return -1;
161 }
162 //删头节点
163 if (n < 2) {
164 ptemp = this->head->next;
165 this->head->next = ptemp->next;
166 free(ptemp);
167 this->size--;
168 return 0;
169 }
170 //尾部删除
171 if (n == this->size) {
172 ptemp = this->head;
173 for (int i = 1; i < this->size;i++) {
174 ptemp = ptemp->next;
175 }
176 ptemp2 = ptemp->next;
177 ptemp->next = NULL;
178 free(ptemp2);
179 this->size--;
180 return 0;
181 }
182 //中间删除
183 else
184 {
185 ptemp = this->head;
186 for (int i = 1; i < n; i++) {
187 ptemp = ptemp->next;
188 }
189 ptemp2 = ptemp->next;
190 ptemp->next = ptemp2->next;
191 free(ptemp2);
192 this->size--;
193 return 0;
194 }
195 }
196
197 int LinkList::GetLen()
198 {
199 return this->size;
200 }
201
202 bool LinkList::IsEmply()
203 {
204 if (this->head == NULL) {
205 return true;
206 }
207 else{
208 return false;
209 }
210 }
211
212 void main(void)
213 {
214 LinkList list;
215 LinkList *plist = &list;
216 plist->CreateLinkList(5);
217 plist->TravalLinkList();
218 Node temp;
219 temp.data = 100;
220 temp.next = NULL;
221 plist->InsertLinklList(&temp, 0);
222 plist->TravalLinkList();
223 plist->InsertLinklList(&temp, plist->GetLen()+1);
224 plist->TravalLinkList();
225 plist->InsertLinklList(&temp, 5);
226
227 plist->TravalLinkList();
228 plist->DeleteLinklist(0);
229 plist->TravalLinkList();
230 plist->DeleteLinklist(list.GetLen());
231 plist->TravalLinkList();
232 plist->DeleteLinklist(2);
233 plist->TravalLinkList();
234
235
236 plist->BYELinkList();
237 system("pause");
238 }