关于链表的操作——创建、增删改查
#include <bits/stdc++.h>
using namespace std;
/*创建链表节点*/
struct node{
int data;
node* next;
};
/*创建链表*/
node* create(int Array[]){
node *p, *pre, *head;
head = new node;
head->next = NULL;
pre = head;
for(int i=0; i<5; i++){
p = new node;
p->data = Array[i];
p->next = NULL;
pre->next = p;
pre = p;
}
return head;
}
/*查找某个节点*/
int search(node* head, int x){
int count = 0;
node* p = head->next;
while(p!=NULL){
if(p->data == x)
count++;
p = p->next;
}
return count;
}
/*插入某个节点*/
void insert(node* head, int pos, int x){
node* p = head;
for(int i=0; i<pos-1; i++){
p = p->next;
}
node* q = new node;
q->data = x;
q->next = p->next;
p->next = q;
}
/*删除某个节点*/
void del(node* head, int x){
node* p = head->next;
node* pre = head;
while(p!=NULL){
if(p->data==x){
pre->next = p->next;
delete(p);
p = pre->next;
}
else{
pre = p;
p = p->next;
}
}
}
int main() {
int Array[5] = {5, 3, 6, 1, 2};
node* head = create(Array);
/*打印节点*/
node* L1 = head;
L1 = L1->next;
while(L1!=NULL){
printf("%d ", L1->data);
L1 = L1->next;
}
printf("\n");
/*打印查找节点*/
printf("%d\n", search(head, 6));
/*打印插入节点*/
insert(head, 3, 7);
node* L2 = head;
L2 = L2->next;
while(L2!=NULL){
printf("%d ", L2->data);
L2 = L2->next;
}
printf("\n");
/*打印删除节点*/
del(head, 6);
node* L3 = head;
L3 = L3->next;
while(L3!=NULL){
printf("%d ", L3->data);
L3 = L3->next;
}
printf("\n");
return 0;
}