关于带头结点的单链表倒置问题

有大佬帮忙看看吗?
第25,26行一直报错说取消对NULL指针的引用,调试时卡在这里并且还会报访问权限冲突的错误

img

你的代码错误很多,代码修改如下:

#include <stdio.h>
#include <stdlib.h>

typedef int datatype;
typedef struct link_node 
{
    datatype info;
    struct link_node* next;
}node,*linklist;

linklist createList()
{
    datatype x;
    linklist L;
    char ch;
    L = (linklist)malloc(sizeof(node));
    if (L == NULL)
    {
        printf("error");
        return 0;
    }
    
    linklist n,p;
    p = L;
    printf("请输入整数系列:\n"); //输入系列并以回车结束
    
    while(1)
    {
        scanf_s("%d",&x,1);
        n = (linklist)malloc(sizeof(node));
        n->info = x;
        n->next = NULL;
        p->next = n;
        p = n;
        if( (ch=getchar()) == '\n') break;
    }
    return L;
}

void print(linklist head)
{
    linklist p;
    p = head->next;
    while(p)
    {
        printf("%d ",p->info);
        p = p->next;
    }
    printf("\n");
}

//翻转
linklist reverse(linklist head)
{
    linklist p,t,k;
    p = head->next;
    t = p->next;
    p->next = NULL;
    while(t)
    {
        k = t->next;
        head->next = t;
        t->next = p;
        p = t;
        t = k;
    }
    return head;
}
//释放内存
void release(linklist head)
{
    linklist p;
    while(head)
    {
        p = head->next;
        free(head);
        head = p;
    }
}


int main()
{
    linklist head = createList();
    print(head);
    
    head = reverse(head);
    printf("逆序后:");
    print(head);
    release(head);
    return 0;
}

怎么说呢, 这段代码好多问题。
首先你想弄一个链表,但是你按数组的方式来分配了内存,这就不合逻辑了。
然后while循环里面, 你用x做条件,但是你在循环里面又不改变x的值,这样就死循环了。
还有循环里面的逻辑,我也看不太懂。
你再自己理理清楚吧,这样的没办法说清楚了