请问几个单链表的有关问题?有劳各位大侠了

请教几个单链表的问题?有劳各位大侠了
下面分别是单链表的创建、插入、删除

(1)插入
Node *insert(node *head,int num)
{
Node *p0,*p1,*p2;
P1=head;
P0=(noda *)malloc(sizeof(node));
P0->data=num;
While(p0->data > p1->data && p1->next !=NULL) {
P2=p1;p1=p->next;
}
If(p0->data <= p1->data)
{
If(head == p1)
{
P0->next=p1;
Head =p0
}
Else
{
P2->next=p0;
P0->next=p1;
}
}
Else
{
P1->next=p0;
P0->next=NULL;
}
Return (head);
}


(2)删除
Node *del(node *head,int num)
{
Node *p1,*p2;
P1=head;
While(num!=p1->data && p1->next !=NULL)
{p2=p1;p1=p1->next;} If(num==p1->data)
{
If(p1==head)//头节点
{
Head = p1->next;
Free(p1);
}
Else//中间节点
P2->next=p1->next;
}
Else
Printf(“%d could not been found\n”,num);
Return(head);
}


我对红色标注的地方不太理解是什么意思,在这里向各位高手请教了,谢谢!

------解决方案--------------------
第1个应该是有序插入,所以先要找到拟插入的位置。
第2个是删除由num指定的节点,所以先要找到对应的节点。
------解决方案--------------------
楼上正解!
------解决方案--------------------
学习!
------解决方案--------------------
第一个就是按照从小到达排列的有序链表,按照这个条件p0->data > p1->data && p1->next !=NULL往后查找,不满足条件的有两种情况:p0->data < p1->data 或p1->next !=NULL,下面的if语句就是如果循环终止的条件是p0->data < p1->data 就说明找到了插入位置,p2->data < p0->data < p1->data ,所以将p0插在p1与p2之间。
第二个与第一个类似,就是找到要删除的数所在的节点

------解决方案--------------------
Node *insert(node *head,int num)//是一从小到大排列的有序表,
While(p0->data > p1->data && p1->next !=NULL){
P2=p1;p1=p1->next;//这里应该是p1而不是p,P0指向的是要插入的结点,p2是辅助指针,当插入的结点数据比当前结点数据更大而当前结点的后继不为空是,就继续往后查找,

If(p0->data <= p1->data)//表示找到了这个们位置,又分两种情况:1:等于,2:小于


While(num!=p1->data && p1->next !=NULL)
{p2=p1;p1=p1->next;} //p2是辅助指针,当插入的结点数据不等于当前结点数据而当前结点的后继不为空是,就继续往后查找,

------解决方案--------------------
Node *insert(node *head,int num)//是一从小到大排列的有序表,
While(p0->data > p1->data && p1->next !=NULL){
P2=p1;p1=p1->next;//这里应该是p1而不是p,P0指向的是要插入的结点,p2是辅助指针,当插入的结点数据比当前结点数据更大而当前结点的后继不为空是,就继续往后查找,
}
If(p0->data <= p1->data)//表示找到了这个们位置,又分两种情况:1:等于,2:小于


While(num!=p1->data && p1->next !=NULL)
{p2=p1;p1=p1->next;} //p2是辅助指针,当要删除的结点数据不等于当前结点数据而当前结点的后继不为空是,就继续往后查找,
前面打错了几个字