在一个单链表head中,一直p指向其中的一个结点,若要在它之前插入一个结点*s,则执行的运算是?

如题所述

我也是先学的~ 首先 你要明白 这个

链表结构 (L表头) (节点1) (节点2) (3) (4)

这里 L下一个指向节点1 ,节点1下一个为节点2;
L->next=节点1 , 节点1->next=节点2;

1.头插法的意思是把一个节点插到 L 和节点1 之间 ,让你插入的节点P 成为第一个节点 。
所以有了上面的p–>next=head–>next(节点1) ; head–>next=p ;

你现在想啊 head–>next=p ; p–>next=head–>next ;就不对了,执行了第一个后,head下一个就是p了 再执行 p–>next=head–>next 就矛盾了。

2,尾插法 么 你定义的p 开始和表头在同一位置,表是空的,所以
p->next=NULL;
执行 q= (LNode *)malloc(sizeof(LNode));
q–>data=data; /* 数据域赋值 */
q–>next=p–>next; p–>next=q; p=q ;

(head) ........(p)

p一直是作为最后一个节点的,p指向空

你看 q->next=p->next 不就是q的指向空;
然后让p的下一个为q(p–>next=q;),不就是把q接到了表的末端,

再使 p=q, 让p一直是链表的最后一个节点, 才能后面不停的尾插入·
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-26
这属于链表操作中的基本问题,不知道你说的是代表结点的单链表还是不带的,但都差不多。

q=head->next; /*这是带表头的单链表,若不带就是q=head;*/
for(;q->next-p;q=q->next); /*找到p的前一个结点*/
s->next=q->next;(或s->next=p)
q->next=s;

不知道是否准确理解了你的意思,希望能帮到你!
相似回答