#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node *next;
}Node,*LinkList;
/*初始化单链表*/
void InitList(LinkList *h)
{
*h=(LinkList)malloc(sizeof(Node));
(*h)->next=NULL;
}
/*创建一个单链表*/
void creatList(LinkList h)
{
LinkList p,q;
q=h;
p=(LinkList)malloc(sizeof(struct Node));
scanf("%d",&p->data);
while(p->data!=-1)
{
q->next=p;
q=p;
p=(LinkList)malloc(sizeof(struct Node));
scanf("%d",&p->data);
q->next=NULL;
}
}
int printList(LinkList *L)
{
Node *p,*q;
p=*L;
while(p)
{
q=p->next;
printf("%5d",q->data);
p=p->next;
}
return 0;
}
int main()
{
LinkList h;
InitList(&h);
printf("请输入数据(以-1结束):\n");
creatList(h);
printf("单链表中的数据为:");
printList(&h);
printf("123");
return 0;
}
在代码中出现了错误,导致程序没有完整运行。
我将代码进行了修改:
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node *next;
}Node,*LinkList;
/*初始化单链表*/
void InitList(LinkList *h)
{
*h=(LinkList)malloc(sizeof(Node));
(*h)->next=NULL;
}
/*创建一个单链表*/
void creatList(LinkList h)
{
LinkList p,q;
q=h;
p=(LinkList)malloc(sizeof(struct Node));
scanf("%d",&p->data);
while(p->data!=-1)
{
q->next=p;
q=p;
p=(LinkList)malloc(sizeof(struct Node));
scanf("%d",&p->data);
p->next=NULL;
}
}
int printList(LinkList L)
{
Node *p;
p=L->next;
while(p)
{
printf("%5d",p->data);
p=p->next;
}
return 0;
}
int main()
{
LinkList h;
InitList(&h);
printf("请输入数据(以-1结束):\n");
creatList(h);
printf("单链表中的数据为:");
printList(h);
printf("\n");
printf("123\n");
return 0;
}
代码出错的原因是:
在printLink列表的时候,当p已经指向了倒数第一个节点的时候,也就是p->next==NULL,而p!=NULL的时候;还要使用q=p->next,输出q中的data内容,由于此时q已经是NULL了,所以无法取出其中的数值,导致等价于print("%5d", NULL->data);这种情况。
我可以理解你使用q指针来避免输出哨位节点中的数值的情况。我修改的代码,将q指针删除了。
如果继续使用q指针,可以将while(p),改为while(p->next);
看打印提示按任意键,继续往后执行,你按键程序往后走
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632