链表输出错误

starcat 2009-08-11 11:41:31
#include <stdlib.h>
#include <stdio.h>
struct node
{
int num;
struct node *next;
}
main()
{
struct node *creat();
void print();
struct node *head;
head = NULL;
head = creat(head);
print(head);
}
struct node *creat(struct node *head)
{
struct node *p1, *p2;
p1 = p2 = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p1 -> num);
p1 -> next = NULL;
while(p1 -> num != -1)
{
if(head == NULL)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p1 -> num);
p1 -> next = NULL;//这一句网上那个例子里没有,自己加上去的。
}
// p1 -> next = NULL;为什么放在这里不行呢?
return head;
}
void print(struct node *head)
{
struct node *temp;
temp = head;
while(temp != NULL)
{
printf("%3d", temp -> num);
temp = temp -> next;
}
}
...全文
91 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bladesoft 2009-08-12
其实看楼主想不想把值为-1的这个结点挂在链尾了,如果要挂的话,就是P1->next=NULL;
如果不要的话,就用P2->next=NULL.
另外楼上提醒你的很对,要注意释放不用的指针,不要让他乱指。
回复
baihacker 2009-08-12
[Quote=引用 9 楼 czj19891224 的回复:]
请这种字体颜色怎么弄 的啊

[/Quote]

注意编辑框上面有一排
ABIUSA#
点一下#,然后选择C/C++
然后把代码写中间...
回复
czj19891224 2009-08-12
请这种字体颜色怎么弄 的啊
回复
mstlq 2009-08-12
[Quote=引用 7 楼 baihacker 的回复:]
引用 4 楼 mstlq 的回复:
其实p2 -> next = NULL后面还欠一句free(p1)……

整个链表都还欠free...
[/Quote]

呵呵,我忘了去查源代码里面有没有free链表的函数,就默认他有了^_^
回复
baihacker 2009-08-12
[Quote=引用 4 楼 mstlq 的回复:]
其实p2 -> next = NULL后面还欠一句free(p1)……
[/Quote]
整个链表都还欠free...
回复
bladesoft 2009-08-12
仔细看看~
回复
starcat 2009-08-11
呵呵,我的思维现在是很混乱。

原文在这里:http://www.xxlinux.com/linux/article/development/soft/20060924/4633.html

一上来就碰到输出结果不对,才自己瞎调试的。
回复
mstlq 2009-08-11
其实p2 -> next = NULL后面还欠一句free(p1)……
回复
baihacker 2009-08-11
注意你的逻辑,
在里面每次都产生一个p1,然后p1->next的指向不明确.
然后看看结束的时候有什么效果,
这个时候,p2是上一个p1,也就是说p2->next的指向不明确的,现在又有了一个p1,p1->num = -1,p2->next不明确.

现在看到p1->next == -1,于是结束.
也就是说现在这个新的p1,并没有挂到链后,链的最后一个元素是p2,需要的是p2->next = NULL,而不是p1->next = NULL.
回复
mstlq 2009-08-11
p2 -> next = NULL
回复
mstlq 2009-08-11
说实话,还是放外面好……



#include <stdlib.h>
#include <stdio.h>
struct node
{
int num;
struct node *next;
};
int main()
{
struct node *creat();
void print();
struct node *head;
head = NULL;
head = creat(head);
print(head);
return 0;
}
struct node *creat(struct node *head)
{
struct node *p1, *p2;
p1 = p2 = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p1 -> num);
p1 -> next = NULL;
while (p1 -> num != -1)
{
if (head == NULL)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p1 -> num);
//p1 -> next = NULL;//这一句网上那个例子里没有,自己加上去的。
}
p2 -> next = NULL;//p1 -> next = NULL;为什么放在这里不行呢?
return head;
}
void print(struct node *head)
{
struct node *temp;
temp = head;
while (temp != NULL)
{
printf("%3d", temp -> num);
temp = temp -> next;
}
}
回复
发动态
发帖子
C语言
创建于2007-09-28

6.2w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告