我申请单链表的一段空间,但是给了警报
我想请问一下有什么问题吗?附上整个代码
#include <iostream>
using namespace std;
#include <string>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
int Length = 0;
}Node;
typedef struct Node *LinkList;
//void InitList(LinkList *L){ //初始化 表长设为0
// LinkList p;
// p->Length = 0;
//}
int LengList(LinkList *L){
LinkList p;
return p->Length;
}
int GetElem(LinkList L , int i, ElemType *e){ //读取单链表中第i个值
int j;
LinkList p; //声明一节点p
p = L -> next; //让p指向L的第一个节点
j = 1; //j为计数器
while (p && j < i){ //p不为空 或者计数器j还没有等于i时,循环继续
p = p ->next; //让p指向下一个节点
++j;
}
if(!p || j > i){ //如果p为空,或者j大于i时,循环结束
return ERROR; //i元素不存在
}
*e = p->data; //取第i个元素的数据
return OK;
}
int ListInsert(LinkList *L , int i , ElemType e){ //在L中第i个位置之前插入新的数据元素e ,L的长度加1
int j;
LinkList p , s;
p = *L;
j = 1;
while (p && j < i){ //寻找第i个节点
p = p -> next;
++j;
p->Length++;
}
if(!p || j > i){
return ERROR; //第i个元素不存在
}
s = (LinkList) malloc(sizeof(Node)); //生成新节点
s->data = e; //将e的数据加入s中
s->next = p -> next; //将p的后继赋值给s的后继
p->next = s; //将s赋值给p的后继
}
int DaleteList(LinkList *L , int i , ElemType *e){ //删除第i个元素,L的长度减1
int j;
LinkList p , q;
p = *L;
j = 1;
while(p && j < i){ //寻找第i个节点
p = p->next;
++j;
}
if(!p || j > i){
return ERROR; //第i个元素不存在
}
q = p->next; //将p的后继赋值给q
p ->next = p->next->next; //将q的后继赋值给p的后继,相当于p->next->next
*e = q->data; //将d的data赋值给e
free(q); //释放节点q
return OK;
}
void CreateList(int n ,LinkList *L) { //尾插法创建链表
LinkList p , r; //r为节点最终的指针,p为接收的节点
int i ;
srand(time(0));
*L= (LinkList) malloc(sizeof(int));//为整个链表
(*L)->next = NULL;
r= *L; //r为指向尾部的节点
for(i = 0 ; i < n; i++ ){
cin >> i; //输入数值
p = (Node*) malloc(sizeof(Node)); //生成新节点
p -> data = i; //将数值赋值入p
r->next = p; //将表尾终端节点的指针指向新节点
r = p;//将当前的新节点定义为表尾终端节点
p->Length++;
}
delete L;
r -> next = NULL; //表示当前链表结束
}
void show(LinkList *L){ //打印整个链表
LinkList p ;
for(int i = 0;i < LengList(L);i++){
cout << p-> next->data << endl;
}
}
int ClearList(LinkList *L){ //将L重置为空表
LinkList p , q;
p = (*L)->next; //*p指向第一个节点
while (p){ //没到表尾
q = p-> next;
free(p);
p = q;
}
(*L)->next = NULL; //头指针指针域为空
return OK;
}
int main(){
LinkList* L;
int n;
// InitList(L);
//cout << "链表已建立" << endl;
cout << "请输入内容" << endl;
cin >> n;
CreateList(n,L);
cout << "链表已建立" << endl;
show(L);
delete L;
}