c语言 创建单链表 编译运行时程序停止工作是哪里出错呢?

#include<stdafx.h>#include"stdio.h"#include<stdlib.h>#include"string.h"#include"mallo... #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_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);
}
展开
 我来答
IT孤鹜
2013-04-13 · TA获得超过4198个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3593万
展开全部

 

 

已经改正。。。我使用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);

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式