首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C中单链表的有关问题

2012-09-09 
C中单链表的问题此为建立单链表的程序,有几处我想不明白,请高手指点迷津(或说明一下此思想,更是感激不尽!)

C中单链表的问题
此为建立单链表的程序,有几处我想不明白,请高手指点迷津(或说明一下此思想,更是感激不尽!)
typedef struct student
{
int data;
struct student *next;
}node;
#define LEN sizeof(node)
//建立单链表
node *create()
{
node *head,*p,*q;
int x,cycle=1;
head=(node *)malloc(LEN); //????一定要有吗?
p=head;
while(cycle)
{
printf("please input x:");
scanf("%d",&x);
if(x!=0)
{
q=(node *)malloc(LEN);
q->data=x;
printf("\n %d",q->data);
p->next=q;
p=q;
}
else 
cycle=0;
}
  head=head->next; //???????????????????这是什么意思???(总想不明白)
p->next=NULL;
return head;

}

[解决办法]
head=(node *)malloc(LEN); //????一定要有吗? 
回答:
要有,这才完成了一个结点的创建,既然是链表,链表上就得有结点,要有结点就得靠malloc分配内存空间。

 head=head->next; //???????????????????这是什么意思???(总想不明白)
回答:单从这条语句上看是让head指向下一个结点。
从整个函数看起来,作者是想返回有实际数据的node,但head一开始指向的结点并没有实际数据,数据是在while循环中输入的。所以作者将head指向了下一个结点。 

但是这个函数有问题:
1.head一开始指向的结点没有free,将造成内存泄漏。
2.malloc是否成功并没有check。
大的问题就这两处,还有许多小问题,我就不列举了。太多地方不合适了。

热点排行
Bad Request.