链表模板
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct Lnode { int data; Lnode *next; } Lnode,*linklist; void creat_h(linklist &L) //头插法 { linklist s; int n,tmp; L=(linklist)malloc(sizeof(Lnode)); L->next=NULL; scanf("%d",&n); for (int i=1; i<=n; i++) { scanf("%d",&tmp); s=(linklist)malloc(sizeof(Lnode));//新建立一个节点 s->data=tmp; s->next=L->next;//相当于把新的节点的下一个节点指向前面一个节点的地址 L->next=s;//再把这个节点更新 } } void creat_w(linklist &L) //尾插法 { linklist p,q; int n,tmp; L=(linklist)malloc(sizeof(Lnode)); L->next=NULL; p=L; scanf("%d",&n); for (int i=1; i<=n; i++) { scanf("%d",&tmp); q=(linklist)malloc(sizeof(Lnode)); q->data=tmp; q->next=NULL; p->next=q;//把p指向下一个节点 p=q;//更新这个节点 } p->next=NULL; } void print(linklist head) { linklist p=head->next;//由于第一个节点为空,需要把第一个节点排除 while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } void delete_list(linklist head,int w) { linklist p=head,q;//删除的话要从空节点开始连接这样不会漏掉第一个节点 while(p!=NULL){ q=p->next; if(q!=NULL && q->data==w){ p->next=q->next; free(q);//释放空间 }else p=p->next; } } void insert_list(linklist head,int pos,int w){ int s=0;//插入到pos位置计数位置需要从0开始,因为插入删除要从前面一个节点,第一个节点的前一个节点是第一个头节点 linklist p=head,q,tmp; while(p!=NULL) { s++; if (s==pos){ tmp=p->next; q=(linklist)malloc(sizeof(Lnode)); q->data=w; p->next=q; p=q; q->next=tmp; }else p=p->next; } } int main() { int n; linklist a; creat_w(a);print(a); delete_list(a,1);//删除值为1的节点 print(a); insert_list(a,1,1000);//插入在1位置,节点值为1000的节点 print(a); return 0; }
有不懂欢迎咨询
QQ:1326487164(添加时记得备注)