为什么总是段错误啊,怎么改啊

本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。

List Insert( List L, ElementType X ){
    List head=L;
      List pHead = (List)malloc(sizeof(struct Node));
            pHead->Data=X;
    pHead->Next=NULL;
    if(head->Next==NULL){
        head->Next=pHead;
        return L;
    }
    while(head){
        if(X<head->Next->Data){
            pHead->Next=head->Next;
            head->Next=pHead;
            return L;
        }
        head=head->Next;
    }
    if(head->Next=NULL){
        head->Next=pHead;
        return L;
    }
    return L;
}

img

执行到18行的时候,前面的while已经让head为NULL了。

List Insert(List L, ElementType X)
{
    List head = L;
    List pHead = (List)malloc(sizeof(struct Node));
    pHead->Data = X;
    pHead->Next = NULL;

    while (head->Next)
    {
        if (X < head->Data && head != L)
            break;
        head = head->Next;
    }

    pHead->Next = head->next;
    head->Next = pHead;

    return L;
}

【以下回答由 GPT 生成】

我已经修正了代码并对修正部分进行了说明,请查看上面的回答。如果你决定使用我提供的解决方案,请测试一下修正后的代码,以确保它能够正常运行并满足你的需求。如果你有其他问题或需要进一步的帮助,请随时告诉我。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

修改如下,改动处见注释,供参考:

List Insert( List L, ElementType X){
    List head = L;
    List pHead = (List)malloc(sizeof(struct Node));
    pHead->Data=X;
    pHead->Next=NULL;

    if(head->Next == NULL){
        head->Next = pHead;
        return L;
    }
    while(head->Next && head->Next->Data <= X) head = head->Next; // 修改
           //while(head){                 修改
           //    if(X<head->Next->Data){  修改
    pHead->Next=head->Next;
    head->Next=pHead;
    return L;
           //}                           修改
           //head=head->Next;            修改
           //}                           修改
           //if(head->Next=NULL){        修改
           //    head->Next=pHead;       修改
           //    return L;               修改
           //}                           修改
           //return L;                   修改
}