在头部插入结点建立单向链表这个算法中有点疑惑,求详细解释,还有我不想听废话

LinkNode *CreateLinkList()//头插入法无头结点建立线性表
{ LinkNode *head,*p,*s;
int x;
int z=1,n=0;
head=NULL;
printf("\n\t\t建立一个线性表");
printf("\n\t\t说明:请逐个输入整数,结束标记为“-1”!\n");
while(z)
{ printf("\t\t输入:");
scanf("%d",&x);
if(x!=-1)
{ s=(LinkList *)molloc(sizeof(LinkNode));
n++;
s->data=x;
s->next=head;
head=s;
}
else z=0;
}
return head;
}

当中
s->data=x;
s->next=head;
head=s;
这三句的解释

LinkNode 这个结构体中有两个元素,一个是data代表结构体的数值,另一个是LinkNode类型的指针Next,表示的是当前结构体指向的下一个结构体,这样就形成了一个链状的存储结构。


s->data=x;     表示将x的值赋给s这结构体的数据段(data)

s->next=head;     表示s指向的下一个结构体就是名字为head的结构体,开始的时候head是空的,这样就形成了一个判断条件,当链表的某一结构体的next为null是链表就结束了。

head=s;     head表示链表的头,也就是整个链表的入口,这句话表示将最前面那个结构体赋给head做为链表的入口。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-05

执行情况如图所示:

 

第2个回答  2012-10-05
这是一个无头结点的链表呀,head在这里可以做头指针理解,是指向链表的第一个结点,s是插入结点,s的数据域为x。s->next=head,s的指针域指向第一个结点,就是在把第一个结点连在s的后面,s就成第一个结点,再把头指针指向s,用来记录整条链第一个结点的地址。追问

我想问的是:图中1是怎么实现的?

第3个回答  2012-10-05
s是新申请的结点
s->data=x; 给结点数据赋值

s->next=head; 将原表挂到新结点之后
head=s; s成为新的头结点追问

图中1是怎么实现的?

追答

原head指向25
申请新结点s
s->data=45; 给结点数据赋值45
s->next=head; 将原表25 挂到新结点45之后
head=s; s成为新的头结点 , 现在head指向45

本回答被提问者采纳
第4个回答  2012-10-05
s->data=x;
s->next=head;
head=s;

"s" 是刚开辟的节点的指针
s->data=x; :把从键盘读入的值付给节点里的data;
s->next=head; 因为是头插入法插入节点,所以把这一次刚开辟的节点指向上次的头结点,那新节点就为这次的头结点;
head=s; :为下次重新插入节点作准备,即设为旧节点
相似回答