链表中插入一个节点

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:29:51
帮忙分析一下
下面是程序的一部分,p为指向要插入的节点,链表不为空
node *insert(node *head,node p)
{
node *p1,*p2;
if(head->data>=p->data){
p->next=head;
head=p;
return(head);}
p2=p1=head;
while(p2->next&&p2->data<p->data)//循环结束的条件是什么啊?遍历到哪儿结束?到表尾还是到p前面的那个节点?
{
p1=p2;
p2=p2->next;
}
if(p2->data<p-data){
p2->next=p;
p->next=0;} //为什么这样就能判断已经到表尾了啊?
else{
p->next=p2;
p1->next=p;
}
return(head);
}
要犯糊涂,高手来帮帮忙啊
第一行错了,括号里应该是node *p
谢谢大家,我明白了

node *insert(node *head,node *p) // 结点也要传指针 node *p
{
node *p1,*p2;
if(head->data>=p->data){
p->next=head;
head=p;
return(head);}
p2=p1=head;
while(p2->next&&p2->data<p->data)//循环结束的条件是p2指向尾结点或找到不小于 p 中数据的结点。
{
p1=p2;
p2=p2->next;
} //此时,p2已经指向要插入的位置,只需将p结点插入到p2之后即可。
//if(p2->data<p-data){ 无需此判断了。
p2->next=p;
p->next=p2->next;} //改为这样。这里不是判断表尾,是插入p结点。
/*else{ 同样无必要。
p->next=p2;
p1->next=p;
} */
return(head);
}

下面是程序的一部分,p为指向要插入的节点,链表不为空
node *insert(node *head,node p)
{
node *p1,*p2;
if(head->data>=p->data){
p->next=head;
head=p;
return(head);}
p2=p1=head;
while(p2->next&&p2->data<p->data)//循环结束的条件是什么啊?遍历到哪儿结束?到表尾还是到p前面的那个节点? 循环结束的条件有两个p2->next和p2->data<p->data,这两个只要有一个不成立循环都将结束(注意两者之间用的&&符号),如果是第一个条件不成立结束的,则p2指向末尾,如果是第