单链表(一级指针实现)

来源:互联网 发布:出售一审淘宝店铺 编辑:程序博客网 时间:2024/05/31 18:39
//基本思路和上一篇博文类似,只是本次在传输时直接传输首指针所指向的内存地址,而不是首指针自身的地址,并在每次弹出栈时返回首指针所指向的地址#include <stdio.h>#include <stdlib.h>typedef struct newlist{    int data;    struct newlist *next;} onelist;onelist *insertone(onelist *old_flist,int a){    onelist *p =(onelist *)malloc(sizeof(onelist));    p->data = a;    p->next=NULL;    onelist * tmp,*q,*flist = old_flist;    if(flist==NULL)    {        old_flist=p;        return old_flist;             ////修改首指针所存储的值,并返回此值    }    else    {        for( q = flist; q!= NULL; q = q->next)        {            if(q->data>a)            {                old_flist=p;                p->next=q;                return old_flist;            }            else if(q->data<a&&q->next!= NULL)            {                if(q->data<=a&&(q->next)->data>=a)                {                    tmp = q->next;                    q->next = p;                    p->next=tmp;                    return old_flist;                }            }            else if(q->data<=a&&q->next==NULL)            {                q->next=p;                p->next=NULL;                return old_flist;            }        }    }    return old_flist;}onelist * deleteone(onelist *old_flist,int a){    onelist *flist=old_flist,*tmp=NULL,*tmp1=NULL,*tmpback=NULL;    if(flist==NULL)    {        printf("空链表!");        return 0;    }    for(tmp=flist; tmp!=NULL; tmp=tmp->next)    {        if(tmp->data==a)        {            if(tmp->next!=NULL)            {               tmp->data=(tmp->next)->data;               tmp1=(tmp->next)->next;               free(tmp->next);               tmp->next=tmp1;               return old_flist;            }            else            {                if(tmp==flist)                {                    old_flist=NULL;                    free(tmp);                    return old_flist;                }                else                {                    tmpback->next=NULL;                    free(tmp);                    return old_flist;                }            }        }        tmpback=tmp;    }    return old_flist;}int main(){    onelist *flist =NULL,*tmp=NULL;    int a,num,count=1;    printf("请输入要插入数的个数:");    scanf("%d",&num);    while(num>=count)    {        printf("请输入第%d个数:",count);        scanf("%d",&a);        flist=insertone(flist,a);//传过去首指针中所存的值,并返回修改后的首指针的值        count++;    }    tmp=flist;    while(tmp!=NULL)    {        printf("%d\n",tmp->data);        tmp=tmp->next;    }    printf("请输入您要删除的数字:");    scanf("%d",&num);    flist=deleteone(flist,num);    tmp=flist;    printf("删除后的链表为:\n");    while(tmp!=NULL)    {        printf("%d\n",tmp->data);        tmp=tmp->next;    }    return 0;}
运行结果如下:
原创粉丝点击