C语言头插法建立单链表

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:30:43
LlinList Creat_LlinList()
{
LlinList L=NULL; /*空表L为表头*/
LNode *s;
int x;
scanf(" %d ",&x);
while(x! = flag)
{
s=malloc(sizeof(LNode));
s->data=x;
s->next=L ; L=s;
scanf("%d",&x);
}
return L;
}
这是头插入法创建单链表,但"s->next=L ; L=s;"我十分不懂?

1' L为头指针,里面应该没有地址呀,那又怎么会赋给 s->next 呢?

2' 假设我依次输入 1,2,3,4,5,那哪个是头,哪个是尾???

3' 请解释s->next=m->next,s->next=m , s->next=NULL 和s=s->next

谢谢啊

1. 所谓头指针即为指向链表第一个节点的指针(若链表含有头结点,则指向头结点),该指针变量的值即为链表第一个节点(或头节点)的地址 ,故对于你这段代码来说头指针L存放的是链表第一个元素的地址(因为没有头节点),若要将s所指向的元素要插入到表头,步骤如下:(1)新元素与链表建立连接,(2)断开头指针与链表的连接,(3)头指针指向新的表头(本程序中即s所指的元素).
用代码实现即为:(1)s->next=L(L原先指向第一个元素,现在让新元素与链表建立连接,新元素成为表头元素,原来的表头元素成为链表上的第二个元素,需要将s的链接指针指向原先的表头元素,即把L中原先存储的表头元素的地址赋给s的next指针),(2)(3)L=s(第一步完成了新元素加入链表的操作,若要想新元素作为链表的第一个元素,就要把它的地址赋给头指针L,因为L作为头指针应该始终指向表头元素.这个语句就是实现第二和第三步的:断开头指针与链表的连接,头指针指向新的表头)
2. 如果你对上面的解释能接受的话,那么这一问你应该可以解答了:分析过程就不写了,由头至尾为:5->4->3->2->1
3. 至于这一问,要放到具体的上下文环境中来解释,但无非就是链表的插入,删除操作.可以找相关的资料看一看

诚如一楼所言:这部分刚开始学习时最好画个图,就很容易明白了

你也可以去这看一看:
http://blog.csdn.net/bingwen0210/archive/2007/04/07/1556089.aspx
上面有图.

1) L为头指针,如果链表有元素,则L指向第一个元素,如果没有元素,则L为空指针;当然可以赋值,是把它自己的值赋给s->next,而不是它里面的地址;
2)每次都把新来的元素放到头(插头法),所以当然是5是头,1是尾了。
3)不知道你的意思,那几个是一个一个看,还是一起看?在代码中出现于什么地方?<