c语言单链表每次进行查找操作和排序操作的时候程序就闪退

刚学单链表,但是程序每到进行查找操作和排序操作,程序就闪退
编译的时候也没有报错,深夜求助,下面是测试程序的一些片段,单链表初始化和其他操作如插入、删除、输出等都没什么问题,就是一到下面两种操作就闪退了,两个操作函数都是void型的

Linklist L;
ElemType *e;
case 9:printf("请输入元素的位置\n");scanf("%d",&flag);GetElem(L,flag,e);break;//找到flag位置的数据并print出来
case 14:LinkSort(&L);break;//对单链表中的数据排序

下面是查找操作的函数

void GetElem(Linklist L,int i,Elemtype *e)
{
    if (L==NULL)
    {
        printf("单链表不存在\n");
    }
    else
{
     if (L->next==NULL)
    {
        printf("单链表为空\n");
    }//前提判断
    else{
    int length;
    length=ListLength(L);
    if (i>length||i<0)
    {
        printf("输入错误\n");
    }//判断输入合法性
    else
    {
    int j=0;
    for (j = 0; j < i; j++)
    {
        (*e)=(L->next)->data;
        L=L->next;
    }//循环i次,将L->next指向第i个节点,并传值给*e
    printf("第%d个位置的数据为%d\n",i,*e);
    }
}
}
}

下面是排序操作的函数,排序操作的我的思想是,创建一个新单链表,然后将传入的单链表的每个节点的数据先与新单链表中的数据进行比较,从小到大确定位置,然后再用插入操作,将每个数据插入新的单链表中

void LinkSort(Linklist *L)
{
    if ((*L)==NULL)
{
    printf("单链表不存在\n");
}
else
    {
        int l=ListLength(*L);
        if (l<2)
        {
            printf("单链表中至少要有两个元素才能进行排序\n");
        }
        else
        {
    int i;
    Linklist p=(*L)->next;
    Linklist q,s;
    q=(Linklist)malloc(sizeof(LNode));
    q->next=NULL;
    s=(Linklist)malloc(sizeof(LNode));
    s->data=p->data;
    s->next=NULL;
    q->next=s;//先将传入单链表的第一个节点的数据添加到新单链表中去
    Linklist r=q->next;
    p=p->next;
    while(p->next!=NULL)
    {
        i=1;//i是用来确定后续插入位置的
        while((p->data)>(r->data)&&r->next!=NULL)
        {
            i++;
            r=r->next;
        }
        if ((p->data)>(r->data))
        {
            i++;
            ListInsert(&q,i,p->data);
        }
        else
            ListInsert(&q,i,p->data);
        p=p->next;
        r=q->next;
    }
        i=1;
        while((p->data)>(r->data)&&r->next!=NULL)
        {
            i++;
            r=r->next;
        }
        if ((p->data)>(r->data))
        {
            i++;
            ListInsert(&q,i,p->data);
        }
        else
            ListInsert(&q,i,p->data);
        *L=q;
        printf("排序完成\n");
    }
    }
}

再附上插入操作函数

void ListInsert(Linklist *L,int i,Elemtype e)
{
    if (*L==NULL)
    {
        printf("单链表不存在\n");
    }
    else
    {
        int length=ListLength(*L);
        if (i<1||i>length+1)
        {
            printf("输入错误\n");
        }//判断输入的合法性
        else
        {
            Linklist p=*L;
            int j=0;
            for (j = 0; j <i-1 ; j++)
            {
                p=p->next;
            }//通过循环使p指向所要插入节点位置的前一个节点
            Linklist *r;
            (*r)=(Linklist)malloc(sizeof(LNode));
            (*r)->data=e;
            (*r)->next=p->next;
            p->next=*r;//将新建立的节点插入
            printf("插入成功\n");
        }
    }
}

这是操作情景,直接退回桌面了 呜呜呜
图片说明

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
C语言!!!!单链表 问题
2
C语言单链表相关问题求解,具体要求如下
2
单链表实现一元多项式相加的问题
2
【数据结构】求助:一个简单的单链表问题
0
单链表的插入,删除,基本问题!着急!!!
1
从键盘输入一组数据建立单链表,然后输出奇数位上的元素。
1
C语言单链表这题代码不知道哪错了http://acm.zzuli.edu.cn/problem.php?id=1194
1
萌新提问,单链表递归排序
0
在单链表中统计某区域内的元素,将获得元素插入新单链表,并打印新链表元素在原链表中的序号
1
学生成绩管理 C语言数据结构
2
c++单链表创建新结点时不能输出值
1
C语言,我明明把单链表的某个节点删除了,但单链表写入文件时还是会写入一些奇怪的东西?
3
带头结点的循环/非循环单链表删除开始结点的时间复杂度
0
单链表实现的多项式加减法计算,输入的负号变成了正号,并且幂为负时显示错误,这个程序应该怎么改?
2
c语言 为什么函数可以返回了一个局部指针结构体?
1
单链表中删除节点后游离的节点怎么释放内存空间,不能用free,系统会自动回收吗?
1
单链表查找运算报SIGSEGV错误
1
单链表查找运算报SIGSEGV错误?
1
C语言:单链表输出显示问题
1
有一个单链表L,假设结点值为整,怎么设计一个尽可能高效的算法将所有值小于0的结点移到所有值大于0的结点前面?