#include<stdio.h>#include<stdlib.h>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;}//在以head为结点的链表上计数元素x的个数 intsearch(node* head,int x){int count =0;
node* p = head -> next;while(p!=NULL){if(p->data==x){
count++;}
p = p -> next;}return count;}//将x插入以head为头结点的链表的第pos个位置上 voidinsert(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;}//删除以head为头结点的链表中所有数据域为x的结点 voiddel(node* head,int x){
node* pre = head;
node* p = head -> next;//p从第一个结点开始枚举while(p!=NULL){if(p->data == x){
pre -> next = p -> next;delete(p);//important!!!
p = pre -> next;}else{//数据域不是x,把pre和p都后移一位
pre = p;
p = p -> next;}}}intmain(){int array[5]={1,2,1,4,5};
node* L =create(array);printf("%d\n",search(L,1));insert(L,3,6);del(L,6);
L = L -> next;while(L!=NULL){printf("%d",L->data);
L = L -> next;}return0;}