单链表C++实现代码

  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 }

 

posted @ 2022-03-30 21:02  阿大古  阅读(59)  评论(0)    收藏  举报