问下各位,引发了异常: 读取访问权限冲突。 **p** 是 nullptr。怎么解决?

问题遇到的现象和发生背景

引发了异常: 读取访问权限冲突。
p 是 nullptr。

img

问题相关代码,请勿粘贴截图

#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
typedef int DataType;
typedef struct Lnode
{
DataType data;
struct Lnode* next;
}LinkList;
void Initlist(LinkList*& L)
{
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
}
void DestroyList(LinkList* L)
{
LinkList* p = L, * q = L->next;
while (q != NULL)
{
free(p);
p = q;
q = p->next;
}
free(p);
}
void Listempty(LinkList* L)
{
if (L->next == NULL)
printf("链表为空");
else
printf("链表不为空");
}
int Listlength(LinkList* L)
{
LinkList* p = L;
int i = 0;
while (p->next != NULL)
{
i++;
p = p->next;
}
return i;
}
void output(LinkList* L)
{
LinkList* p = L->next;
while (p->next != NULL)
{
printf("%d ", p->data);
p = p->next;

}
printf("%d ", p->data);
printf("\n");

}
int Getdata(LinkList* L, int i, DataType x)
{
LinkList* p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("non-existent\n");
return 0;
}
else
{
x = p->data;
return x;
}
}
int Locatedata(LinkList* L, DataType x)
{
LinkList* p = L;
int j = 0;
while (p != NULL && p->data != x)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("NOt Found!\n");
return 0;
}
else
return(j);
}
int Insertdata(LinkList* L, int i)
{
LinkList* p = L, * s;
int j = 0;
DataType x = 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("Place is wrong");
return 0;
}
else
{
printf("输入链表元素:");
while (j < i - 1)
{
s = (LinkList*)malloc(sizeof(LinkList));
scanf_s("%d", &x);
s->data = x;
s->next = p->next;
p->next = s;
j++;
return 1;
}

} 

}
int Deletelist(LinkList* L, int i, DataType x)
{
LinkList* p = L, * s,* q;
int j = 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("Place is wrong\n");
return 0;
}
else
{
s = p->next;
if (s == NULL)
{
printf("non-existent\n");
return 0;
}
x = s->data;
p->next = s->next;
free(s);
return 1;
}
}

int deletes(LinkList* L, int min, int max)
{
LinkList* p = L;
LinkList *q = L->next;
while (q != NULL) {
if (q->data > min && q->data < max) {

        p->next = q->next;
        delete q;
        q = p->next;
        return 1;

    }
    else {

        p = p->next;
        q = p->next;
        return 0;
    }
}

}

int main()
{
int i = 0;
int a = 0, b = 0;
LinkList* L;
DataType x;
printf("(1)初始化单链表:\n");
Initlist(L);
printf("输入插入元素的个数:");
scanf_s("%d", &i);
printf("\n");
printf("(2)依次采用尾插法插入元素:\n");
Insertdata(L, i);
printf("(3)输出单链表:\n");
output(L);
printf("(4)输入min和max:");
scanf_s("%d,%d", &a, &b);
printf("\n");
deletes(L, a, b);
printf("(5)处理后的单链表:");
output(L);
printf("\n");

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

代码不全,可能是你建表的时候有错误。
insertdata函数中,else语句中的 while (j < i - 1) 这个条件删掉

img

报错说P是空指针
你在调用p->next之前,要先判断p本身非空
把p->next!=null改为p!=null