33,311
社区成员
发帖
与我相关
我的任务
分享
void creat(LinkList head)
{
printf("Input the content:\n");
LinkList p1,p2;
p1=p2=(LinkList)malloc(sizeof(LNode));
head->next=p1;
while(p1->data)
{
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
if(p1->data!=0)
{p2->next=p1;p2=p1;}
}
p2=NULL;
free(p1);
}
把你的这部分代码和我给你的修改对比一下;如上你的代码逻辑。p1申请了堆上空间,有没有对p1->num初始化?没有初始化就while(p1->num)是不是会有问题;
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void creat(LinkList head);
void travel(LinkList head);
int main()
{
LinkList head=NULL;
head = (LinkList)malloc(sizeof(LNode));
if (!head)
exit(0);
creat(head);
travel(head);
return 0;
}
void creat(LinkList head)
{
printf("Input the content:\n");
LinkList p1, p2;
p1 = (LinkList)malloc(sizeof(LNode));
if (!p1)
exit(0);
scanf("%d",&p1->data);
p2 = head;
while(p1->data)
{
p2->next = p1;
p2 = p1;
p1 = (LinkList)malloc(sizeof(LNode));
if (!p1)
exit(0);
scanf("%d",&p1->data);
}
p2->next = NULL;
free(p1);
}
void travel(LinkList head)
{
LinkList L = head->next;
while(L) {
printf("%d\t",L->data);
L = L->next;
}
putchar(10);
}
参考一下吧
注意创建链表时的逻辑,可以对比一下代码找原因。