建立链表

喜欢嗑瓜子 2009-06-13 05:01:38
我想用一个循环建立一个有5节点的链表,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>


struct good{ //结构类型
int x;
char name[10];
struct good *next;
};

int main(void) /*main函数开始*/
{
struct good *head=NULL; /*头指针*/
struct good *newfile=NULL;
int x=0;

head=(struct good *)malloc(sizeof(struct good));
newfile=head;

while(x<5) /*循环用于建立5个节点的链表*/
{
newfile=newfile->next; /*指向下一个节点*/
newfile=(struct good *)malloc(sizeof(struct good)); /*为新节点分配空间*/

if(x==4) /*判断是否到了最后一个节点*/
{
newfile->next = NULL; /*最后一个节点next指针为空*/
}
x++;
}

free(head); /*释放内存*/
return 0;
}
程序可以正常运行,但是链表只有两个节点?问题出在什么地方?
如果我要使用循环建立一个链表,代码怎么写?
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
喜欢嗑瓜子 2009-06-14
  • 打赏
  • 举报
回复
我知道程序有问题了。
但是为什么每次运行可以成功分配两个节点,在第三个的时候,就没有了?

breezes2008 2009-06-13
  • 打赏
  • 举报
回复
2楼 ,YES!
tcm441224375 2009-06-13
  • 打赏
  • 举报
回复
我看了一下你的程序,你只有两个节点
是因为你的程序只创建了head=(struct good *)malloc(sizeof(struct good));
和newfile=(struct good *)malloc(sizeof(struct good));
你的while里创建 的结点,你没有链接到head后面
不知是不是这样分析
  • 打赏
  • 举报
回复
while(x <5) /*循环用于建立5个节点的链表*/
{
newfile=newfile->next; /*指向下一个节点*/
newfile=(struct good *)malloc(sizeof(struct good)); /*为新节点分配空间*/

if(x==4) /*判断是否到了最后一个节点*/
{
newfile->next = NULL; /*最后一个节点next指针为空*/
}



这里是可行的

struct good *current=NULL; //你需要一个当前指针
current=head;

while(x <5) /*循环用于建立5个节点的链表*/
{
newfile=(struct good *)malloc(sizeof(struct good)); /*为新节点分配空间*/
newfile=current->next;
current=newfile;

if(x==4) /*判断是否到了最后一个节点*/
{
newfile->next = NULL; /*最后一个节点next指针为空*/
}
光宇广贞 2009-06-13
  • 打赏
  • 举报
回复
while(x <5) /*循环用于建立5个节点的链表*/
{
newfile=newfile->next; /*指向下一个节点*/
newfile=(struct good *)malloc(sizeof(struct good)); /*为新节点分配空间*/

你这句
newfile=newfile->next; /*指向下一个节点*/
先让指针指空了……其实是断掉了与前面的联系……

你应该是先指指定next,然后再去移到下一位,而不是先去移位。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧