C语言动态链表的问题

为什么这段代码输出的是12340而不是12345啊?希望给出错误的地方和改正代码#include"stdio.h"#include"malloc.h"typedefstr... 为什么这段代码输出的是12340而不是12345啊?希望给出错误的地方和改正代码

#include "stdio.h"
#include "malloc.h"

typedef struct node
{
int data;
struct node *next;
}NODE;

void main()
{
NODE *head,*node;
int i;

for(i=0;i<5;i++) //创建5个节点的链表
{
node->data=i;
if(i==0)
head=node;
else
{
node->next=(NODE *)malloc(sizeof(NODE));
node=node->next;
}
}
node->next=NULL;

while(head) //输出链表
{
printf("%d",head->data);
head=head->next;
}
}
展开
 我来答
匿名用户
2013-12-23
展开全部
你自己malloc时对头节点不是动态的
#include "stdio.h"
#include "malloc.h"

typedef struct node
{
int data;
struct node *next;
}NODE;

void main()
{
NODE *head,*node;
int i;
head = (NODE *)malloc(sizeof(NODE));
node = head;
for(i=0;i<5;i++) //�0�7�0�7�0�5¨5�0�0�0�2�0�5�0�3�0�8�0�0�0�8�0�2�0�9�0�7±í
{
node->data=i;
if(i!=4)
{
node->next=(NODE *)malloc(sizeof(NODE));
node=node->next;
}else
{
node->next=NULL;
}
}

node = head;
while(node) //�0�8�0�1�0�6�0�2�0�9�0�7±í
{
printf("%d",node->data);
node = node->next;
}

}
匿名用户
2013-12-23
展开全部
#include "stdio.h"
#include "malloc.h"

typedef struct node
{
int data;
struct node *next;
}NODE;

void main()
{
NODE *head,*node;
int i;
head=node;
for(i=0;i<5;i++)
{
node->data=i;
node->next=(NODE *)malloc(sizeof(NODE));
node=node->next;

}
node->next=NULL;

while(head->next)
{
printf("%d",head->data);
head=head->next;
}
}

楼主这几句
if(i==0)
head=node;
只是把head指向了node,没有node=node->next
下次循环时又把head->data中的值覆盖成1了,所以输出不了0
输出时,按楼主意思循环条件应该是while(head->next)
如果只是while(head)会多输出一个0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-23
展开全部
刚进入for循环的第一句node->data=i;当i=0时NODE都没有分配内存怎么进行赋值操作,随后将这个结点作为头当然不对。另外头结点的next域又没有赋值,根本没有形成一个链表。我觉得12340也输出不了的。
你应该从i=0到5顺着流程走一遍就能够知道症结在哪里了。程序的整个流程不太好,在这个基础上改动很困难。要建立这么一个链表可以这样:
typedef struct node
{
int data;
struct node *next;
}NODE;

int main(int argc, char* argv[])
{
NODE *head,*node,*prev;
int i;
for(i=0;i<5;i++) //创建5个节点的链表
{

NODE *node=(NODE *)malloc(sizeof(NODE));
node->data=i;
node->next=NULL;
if(i==0)
{
head=node;
}
else
{
prev->next=node;
}
prev=node;

}
while(head) //输出链表
{
printf("%d",head->data);
head=head->next;
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-23
展开全部
NODE *head,*node;

指针应该先初始化!!应该改改
NODE *head=new NODE,*node=new NODE;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式