69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
struct node{
int num;
struct node *next;
};
typedef struct node SNODE;
SNODE *creat(void)
{
int ret;
SNODE *r,*h,*p;
int data;
h = (SNODE*)malloc(sizeof(SNODE));
if (!h) {
fprintf(stderr, "Malloc error!\n");
return NULL;
}
r = h;
ret = scanf("%d", &data);
while(ret > 0 && data != -1)
{
p = (SNODE*)malloc(sizeof(SNODE));
if (!p) {
fprintf(stderr, "Malloc error!\n");
return NULL;
}
p->num = data;
p->next = NULL;
r->next = p;
r = p;
ret = scanf("%d", &data);
}
p->next = NULL;
return h;
}
void print(SNODE *head)
{
SNODE *p = NULL;
p = head->next;
if(!p)
printf("\nLinkList is NULL");
else
{
printf("\nhead");
do {
printf("->%d",p->num);
p=p->next;
}while(p != NULL);
printf("->end");
}
}
int main()
{
SNODE *head;
head = creat();
print(head);
return 0;
}
其实没有多复杂的为什么。你的语法就不应该这样,虽然编译器不给你指出错误,但是这样写就是不合法的。因为写的不对,所以结果就不能按照你想法输出。
语法上对于空指针,就是NULL,不要用'\0',先搞明白'\0', NULL, "0", 0这些是什么,做什么用。在什么地方用什么符号,不要混哦。while(scanf("%d",&data),data!=-1)
{
p=(SNODE*)malloc(sizeof(SNODE));
r->next=p;
p->num=data;
r=p;
}
看看这里面最后r = p ;
然后现在你在while之后让p = NULL;
让p的指针指向了一个未知的空间,也就让在while循环中的r = NULL;所以最后程序运行的时候,你可以看到前三个数字都已经输出,然后最后本应该结束的地方却无限的的输出一个未知的值,这是因为在print的时候无法检测到停止的地方;
也就是这里
do{
printf("->%d",p->num);
p=p->next;
}while(p!='\0');
printf("->end");