C语言链表中插入一个数

第一个函数:voidinit(lnode**h){lnode*p;inti;*h=(lnode*)malloc(sizeof(lnode));(*h)->next=nul... 第一个函数:

void init(lnode **h)
{
lnode *p;int i;
*h=(lnode*)malloc(sizeof(lnode));
(*h)->next=null;

for(i=n;i>0;i--)
{
p=(lnode*)malloc(sizeof(lnode));
scanf("%d",&p->data);
p->next=(*h)->next;
(*h)->next=p;
}
}
第二个函数:
int insert(lnode *h,int x,int y)
{
lnode *p,*q;
q=(lnode*)malloc(sizeof(lnode));
q->data=y;
p=h->next;

while (p)
{
if(p->data==x)
{
lnode *nxt=p->next;
p->next=q;
q->next=nxt;
break;
}

p=p->next;
}

return 0;
}

疑问:
1、以第一个函数为例:函数中的一行代码: p->next=(*h)->next意思是将p->next结点指向(*h)->next,还是将(*h)->next结点指向p->next?
2、对于第一个函数,是将p中插入(*h)中,还是将(*h)插入p中?
对于第二个函数,是将p插入q中,还是将q插入p中?

很幼稚的问题,但是对于正在努力理解指针的我来说很不幼稚。

请大侠帮忙小弟,深深地谢谢了!!!
展开
 我来答
云淡风轻in苏州
推荐于2017-09-05 · TA获得超过599个赞
知道小有建树答主
回答量:418
采纳率:0%
帮助的人:557万
展开全部
p->next=(*h)->next意思p->next结点指向(*h)->next;即(*h)->next的值赋给p->next。
//就和a = b;是把b的值赋给a一样

第一个函数中,h是链表的头节点,即通过h可以顺次访问到链表中的其他所有后续节点;是每次生成一个p,再把p插入到h为头节点的链表中的。

第二个函数是将q插入到h为头节点的链表中的。是在值为x的节点后面插入值为y的q节点。注意:p=h->next; p实际指向的是链表中的第一个节点。
追问
1、对于第一个函数:哪个代码表示h是链表的头节点的?哪个代码表示生成p的?哪个代码表示p插入到h为头节点的链表中的?

2、对于第二个函数:哪个代码表示h是链表的头节点的?请大侠详细解释下“在值为x的节点后面插入值为y的q节点”这句话在代码是怎么表示出来的?

请大侠详细帮小弟解释解释,我给你加分!!!
追答
1、init(lnode **h)  传入的是头结点的地址
*h=(lnode*)malloc(sizeof(lnode));
(*h)->next=null;
这个就是在给头结点开空间的;
p=(lnode*)malloc(sizeof(lnode));
scanf("%d",&p->data);
是给p开空间并获取输入的p的data属性值
p->next=(*h)->next;
(*h)->next=p;
这个是把新生成的p加到h的为头结点的链表里的。

2、传入的第一个参数就是*h,应该是传进来之前就已经给h开过空间了。至于为什么是头结点,感觉比较明显。后面的插入节点的时候都是往h后面插入的(注意是往p后面插的,但是p的值一开始就赋值为h->next的,对吧~)
整个while循环是在遍历p(就是h->next)为首个节点的链表,直到找到p的data值为x的就开始做if里面的操作然后break出去。
if(p->data==x)
{
lnode *nxt=p->next;
p->next=q;
q->next=nxt;
break;
}

这个if里面做的是,把q插入到p和原来的p->next之间,其实就是把q放到p的后面一个位置。
至于q的初始化时在while循环外面:
q=(lnode*)malloc(sizeof(lnode));
q->data=y;
p=h->next;
清楚了吧~
匿名用户
2014-10-23
展开全部
1、是把(*h)->next作为新的p->next,也可以理解为p-next指向(*h)->next
2、将p插入(*h)中,,,,,将q插入p中。
这个你看哪个是新建的比如使用new,,malloc,,然后赋值比如:scanf("%d",&p->data);q->data=XXX,这个就是要插入到链表中的元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式