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;
}
} 展开
#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;
}
} 展开
4个回答
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;
}
}
#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
#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;
}
你应该从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;
指针应该先初始化!!应该改改
NODE *head=new NODE,*node=new NODE;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询