链表这样写可以吗?

linhai1978 2005-11-07 04:48:11
九个人组成一个环,每数到第五个人时就删除第五人,直到最后一个人。
typedef struct node *link;
struct node
{
int item;
link next;
}

main()
{
int n=9,m=5;
link x=malloc(sizeof *x);
x->item=1;
x=x->next;//这里怎么就出错了,查看变量x->item出现以下一句话Can not access memory at address 0x0.
.....
}
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2005-11-09
  • 打赏
  • 举报
回复
关键出在main函数上。

int main()
{
int n=9,m=5;
link x = (link)malloc(sizeof(struct node));
link p ,head = x;
x->item = 1;x->next = x;
for(int i=2;i<=n;++i){
p = (link)malloc(sizeof(struct node));
p->item = i;
p->next = head;
x->next = p;
x = x->next;}
....
return 0;
}
你的问题在于没有对x的指针进行初始化,而链表的初始化并不是由malloc函数自动生成的,你把链表当成数组,这可能是你这样写代码的原因……
linhai1978 2005-11-09
  • 打赏
  • 举报
回复
typedef struct node *link;此句有问题
---------------------------
这句话没有问题,你可以查查<c与指针>中的结构和联合
看这个例子
struct A{struct B *partner;};
struct B{struct A *partner;};
这个编译是可以通过的
langzi520 2005-11-09
  • 打赏
  • 举报
回复
循环链表解!
luojxun 2005-11-08
  • 打赏
  • 举报
回复
typedef struct node *link;此句有问题
luojxun 2005-11-08
  • 打赏
  • 举报
回复
struct node
{
int item;
link next; //此处错改node next;
}

另此题用环行连表解
rabbitweng 2005-11-08
  • 打赏
  • 举报
回复
应该是sizeof的问题吧,sizeof括号里最好跟变量类型,而不是跟变量
bombwang 2005-11-08
  • 打赏
  • 举报
回复
学习啊
看得我都糊涂了
lbing7 2005-11-08
  • 打赏
  • 举报
回复
malloc返回的是一个void *你如果不进行类型的强至定义的话,也许就是这个问题吧!

..........................
PS:其实前面已经有朋友答过了
再PS:我经常答错问题,如果这次错了表BS我

谢谢
junhao_666 2005-11-08
  • 打赏
  • 举报
回复
typedef struct node *link;这句应该写在
结构体定义之后;因为这时候node还没有定义。

可以改为
struct node
{
int item;
struct node *next;
}
typedef struct node *link;
linhai1978 2005-11-07
  • 打赏
  • 举报
回复
x=x->next,难道x->next这个时候是0x0吗?为什么
u94586813 2005-11-07
  • 打赏
  • 举报
回复
不是批评你,只是确实觉得有点乱.
还是先看看c语言书吧.
啊.... 不要丢我~~~~~
linhai1978 2005-11-07
  • 打赏
  • 举报
回复
x=x->next这里的x指向什么位置了,为什么指错
csucdl 2005-11-07
  • 打赏
  • 举报
回复
(link)malloc(sizeof(node))
你写的好乱,有一个规则,先声明后使用
那句话的意思是x == NULL
即内存分配失败

69,371

社区成员

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

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