c语言 创建单链表 编译运行时程序停止工作是哪里出错呢?
#include "stdio.h"
#include <stdlib.h>
#include "string.h"
#include"malloc.h"
typedef int elemType;
typedef struct Node //定义单链表节点类型
{
elemType data;
struct Node* next;
}Node;
void initList(Node**pNode) //初始化链表,即设置单链表的表头指针为空
{
*pNode=NULL;
printf("iniList函数执行,初始化成功\n");
}
Node*creatList(Node*pHead) //创建线性链表,此函数输入负数终止读取数据
{
Node* p1;
Node* p2;
p1=p2=(Node*)malloc(sizeof(Node)); //申请新结点
if(p1==NULL||p2==NULL)
{
printf("分配内存失败\nz");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0,也就是清空p1
printf("请输入新的节点:\n");
scanf_s("%d",p1->data); //输入新结点
p1->next=NULL; //新结点的指针为空
while(p1->data>0)
{
if(pHead==NULL) //空表,接入表头
{
pHead=p1;
}
else
{
p2->next=p1; //非空表,接入表尾
}
p2=p1; //将p2移动到表尾
p1=(Node*)malloc(sizeof(Node)); //z再重新申请一个结点
if(p1==NULL||p2==NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0
scanf_s("%d",&p1->data);
p1->next=NULL;
}
printf("creatList执行,;链表创建成功\n");
return pHead;
}
void printList(Node* pHead) //打印链表,链表的遍历
{
if(NULL==pHead) //链表为空
{
printf("printList 函数执行,;链表为空\n");
}
else
{
while(NULL!=pHead)
{
printf("%d",pHead->data);
pHead=pHead->next;
}
printf("\n");
}
}
int main()
{
Node *pList=NULL;
int length = 0;
initList(&pList); //链表初始化
printList(pList); //遍历链表,打印链表
pList=creatList(pList); //创建链表
printList(pList);
} 展开
已经改正。。。我使用vc6.0编译的
#include <stdafx.h>
#include "stdio.h"
#include <stdlib.h>
#include "string.h"
#include"malloc.h"
typedef int elemType;
typedef struct Node //定义单链表节点类型
{
elemType data;
struct Node* next;
}Node;
void initList(Node**pNode) //初始化链表,即设置单链表的表头指针为空
{
*pNode=NULL;
printf("iniList函数执行,初始化成功\n");
}
Node*creatList(Node*pHead) //创建线性链表,此函数输入负数终止读取数据
{
Node* p1;
Node* p2;
p1=p2=(Node*)malloc(sizeof(Node)); //申请新结点
if(p1==NULL||p2==NULL)
{
printf("分配内存失败\nz");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0,也就是清空p1
printf("请输入新的节点:\n");
scanf("%d",&p1->data); //输入新结点
p1->next=NULL; //新结点的指针为空
while(p1->data>0)
{
if(pHead==NULL) //空表,接入表头
{
pHead=p1;
}
else
{
p2->next=p1;
p2=p1; //非空表,接入表尾
}
//将p2移动到表尾
p1=(Node*)malloc(sizeof(Node)); //z再重新申请一个结点
if(p1==NULL||p2==NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0
scanf("%d",&p1->data);
}p2->next=NULL;
printf("creatList执行,;链表创建成功\n");
return pHead;
}
void printList(Node* pHead) //打印链表,链表的遍历
{
if(NULL==pHead) //链表为空
{
printf("printList 函数执行,;链表为空\n");
}
else
{
while(NULL!=pHead)
{
printf("%d",pHead->data);
pHead=pHead->next;
}
printf("\n");
}
}
int main()
{
Node *pList=NULL;
int length = 0;
initList(&pList); //链表初始化 printList(pList); //遍历链表,打印链表
pList=creatList(pList); //创建链表
printList(pList);
}