新建链表的问题
// page271.cpp : Defines the entry point for the console application.//
//链表的建立
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
struct link *appendnode(struct link *head);
void displink(struct link *head);
void deletememory(struct link *head);
struct link
{
int data;
struct link *next;
};
int main(int argc, char* argv[])
{
int i=0;
char c;
struct link *head=NULL;//指向链表头
printf("Do you want to append a new node(Y/N)?");
scanf(" %c", &c);//%c前有一个空格
while(c=='Y' || c=='y')
{
head = appendnode(head);
displink(head);//显示当前链表中的各节点信息
printf("Do you want to append a new node(Y/N)?");
scanf(" %c", &c);//%c前有一个空格
i++;
}
printf("%d new nodes have been apended!\n", i);
deletememory(head);//释放所有已分配的内存
return 0;
}
//函数功能:新建一个节点,并讲该节点添加到链表的末尾,返回添加节点后的链表的头节点指针
struct link *appendnode(struct link *head)
{
struct link *p=NULL;
struct link *pr=head;
int data;
p=(struct link *)malloc(sizeof(struct link));//为新节点申请内存
if(p==NULL)//若申请内存失败,则输出错误信息,退出程序
{
printf("No enough memory!\n");
exit(0);
}
if(head==NULL)//若原链表为空链表,则将新建节点添加到表尾
{
head=p;
}
else//若原链表为非空,则将新建节点添加到表尾
{//若未到表尾,则继续移动指针pr,直到pr指向表尾
while(pr->next != NULL)
{
pr=pr->next ;
}
pr->next=p;//将新建节点添加到链表的末尾
}
pr=p;//让pr指向新建节点
printf("Input node data:");
scanf("%d", &data);//输入节点数据
pr->data=data;
pr->next=NULL;//将新建节点位置为表尾
return head;//返回添加节点后的链表的头节点指针
}
//函数功能:显示所有已建好的节点的节点号和该节点中数据项内容
void displink(struct link *head)
{
struct link *p = head;
int j=1;
while (p != NULL)//若不是表尾,则循环输出
{
printf("%5d%10d\n", j, p->data);//输出第j个节点的数据
p=p->next;//让p指向下一个节点
j++;
}
}
//函数功能:释放head指向的链表中所有节点占用的内存
void detelememory(struct link *head)
{
struct link *p=head, *pr=NULL;//若不是表尾,则释放节点占用的内存
while(p != NULL)
{
pr=p; //若不是表尾,则释放节点占用的内存
p=p->next;//让p指向下一个节点
free(pr);//释放pr指向的当前节点占用的内存
}
}
//问题:编译时没错误,但运行就错误了!什么错误?怎么修改?什么思想?