链表的基本操作

来源:互联网 发布:剑三官方道长捏脸数据 编辑:程序博客网 时间:2024/05/22 06:48
#include<iostream>using namespace std;typedef struct node{int data;struct node *next;}Lnode;//头插法Lnode*creat1(){Lnode*h,*p;h=(Lnode*)malloc(sizeof(Lnode));h->next=NULL;int n;while(cin>>n&&n){p=(Lnode*)malloc(sizeof(Lnode));p->data=n;p->next=h->next;h->next=p;}return h;}//尾插法Lnode*creat2(){Lnode*h,*p,*t;h=(Lnode*)malloc(sizeof(Lnode));h->next=NULL;int n;t=h;while(cin>>n&&n){p=(Lnode*)malloc(sizeof(Lnode));p->data=n;p->next=NULL;t->next=p;t=p;}return h;}int insert(Lnode*h,int i,int elem){Lnode*p,*s;p=h;int j=0;while(p&&j<i-1){j++;p=p->next;//得到指向i-1号节点的指针}if(p){s=(Lnode*)malloc(sizeof(Lnode));s->data=elem;s->next=p->next;p->next=s;return 1;}else return 0;}int length(Lnode*h){Lnode*p;int sum=0;p=h->next;while(p){p=p->next;sum++;}return sum;}int dele(Lnode*h,int i){Lnode*p,*q;int j=0;p=h;while(p&&j<i-1){p=p->next;j++;}if(p){q=p->next;p->next=q->next;free(q);return 1;}else return 0;}Lnode*get(Lnode*h,int i){Lnode*p;int j=1;p=h->next;while(p&&j<i){p=p->next;j++;}if(i==j)return p;else return NULL;}void putlist(Lnode*h){Lnode*p;p=h->next;while(p){cout<<p->data<<' ';p=p->next;}}int main(){Lnode*h;h=creat2();int b=insert(h,4,18);int a=dele(h,3);cout<<length(h)<<endl;cout<<get(h,2)->data<<endl;    putlist(h);return 0;}

0 0
原创粉丝点击