跪求 在创建链表的子函数里开辟空间不成功,该怎么办
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef unsigned char STATUS;
/*定义结点类型*/
typedef struct NODE
{
int Number; /*编号*/
char Name[20]; /*姓名*/
struct NODE *next; /*指针域*/
} NODE, *LINK_LIST;
/*尾插法建立(带头结点的)单链表*/
STATUS LinkedListCreatT(LINK_LIST L, int NodeNum)
{
LINK_LIST p;/*临时结点指针*/
LINK_LIST r;/*指向最后一个结点的指针*/
int i;
/*初始化一个带头结点的空链表*/
L = (LINK_LIST)malloc(sizeof(NODE)); /*申请头结点空间*/
if(L == NULL);
{
return ERROR;
}
p->next = NULL;
L->next= r;
r = L;/*r先指向头结点*/
/*尾插法插入NodeNum个新节点*/
printf("请依次输入%d个结点的信息,先学号,后姓名,学号和姓名用空格隔开,姓名后输入回车\n",NodeNum);
for(i=1; i<=NodeNum; i++)
{
p = (LINK_LIST)malloc(sizeof(NODE)); /*申请一个结点的空间*/
if(p == NULL)
{
return ERROR;
}
printf("第%d个:",i);
scanf("%d", &(p->Number));
scanf("%s", p->Name);
r->next = p;
p->next=NULL;
r = p;
}
/*最后一个结点的next指向NULL*/
r->next = NULL;
printf("%d个结点的信息输入结束,链表创建成功!\n",NodeNum);
/*返回成功*/
return OK;
}
/**************************************************************************/
/* */
/**************************************************************************/
void LinkedListPrint(LINK_LIST L)
{
NODE *start;
printf("当前各个结点的信息依次如下所示:\n");
for(start = L->next; start != NULL; start = start->next)
{
printf("%d %s \n", start->Number, start->Name);
}
}
/*单链表的插入,在链表的第i个位置插入x的元素*/
STATUS LinkedListInsert(LINK_LIST L, int i, int x,const char *Name)
{
NODE *pre;/*pre为插入位置的前驱结点指针*/
int tempi;/*定义计数器,便于查找第i个位置*/
NODE *p;
p=(NODE*)malloc(sizeof(NODE));
/*查找第i个位置的前驱结点*/
pre = L;
for (tempi = 1; tempi < i; tempi++)
{
pre = pre->next;
}
/*为新插入的结点p赋值*/
p->Number = x;
strcpy(p->Name,Name);
/*将新节点p加入到链表中*/
p->next = pre->next;
pre->next = p;
return OK;
}
/*单链表的删除,在链表中删除第x个元素*/
STATUS LinkedListDelete(LINK_LIST L, int x)
{
NODE *pre, *q; /*pre为前驱结点,q为待删除的结点*/
int j;
pre = L;
j = 0;
while( (pre->next!=NULL)&&(j < x - 1) )
{
//寻找第x个结点,并令pre指向其前驱
pre = pre->next;
++j;
}
/*防错代码,处理未找到该位置的情况,如果无错说明pre指向待删除节点的前驱节点*/
if ( (pre->next=NULL) || (j > x - 1) )
{
return ERROR;
}
q = pre->next;//q指向待删除节点
pre->next = q->next; //链表中跳过节点q,实现删除节点的目的
free(q);//释放结点q指向的空间
return OK;
}
/*销毁链表(释放包括头结点在内的所有节点的空间)*/
STATUS DestroyLinkedList(LINK_LIST pList)
{
LINK_LIST p, q;
p = pList;
while(p != NULL)
{
q = p->next;
free(p);
p = q;
}
return OK;
}
int main(void)
{
LINK_LIST pList;
pList=(LINK_LIST)malloc(sizeof(NODE));
STATUS temp;
int InitLen = 1;/*初始化时的结点数量*/
int InsertPlace = 1;
printf("请输入初始化时的结点数量:");
scanf("%d",&InitLen);
printf("\n");
/*尾插法建立(带头结点的)单链表,手动输入各节点的数据(共5个结点)*/
temp = LinkedListCreatT(pList, InitLen);
if(temp == 0)
{
printf("创建链表失败!\n");
return ERROR;
}
/*打印各节点的数据*/
LinkedListPrint(pList);
/*插入一个节点,并再次打印各节点的数据*/
/*计算插入位置*/
InsertPlace = ((InitLen/2)>=1)?(InitLen/2):(1);
/*插入元素*/
temp = LinkedListInsert(pList, InsertPlace, 10, "Zhang San");
if(temp == ERROR)
{
printf("链表插入失败!\n");
return ERROR;
}
printf("链表插入成功! ");
/*打印各节点的数据*/
LinkedListPrint(pList);
/*删除一个节点,并打印各节点的数据*/
temp = LinkedListDelete(pList, 2);
if(temp == ERROR)
{
printf("链表删除失败!\n");
return ERROR;
}
printf("链表删除成功! ");
/*打印各节点的数据*/
LinkedListPrint(pList);
/*销毁该链表*/
DestroyLinkedList(pList);
pList = NULL;
return OK;
}