链表的插入
链表的插入可能会有以下几种意见:
1)可能插入链表中间和链表最后
2)插入空链表中
3)插入链表最后面
------------------------------
首先来分析第1种情况:
1)把p0所指结点插在p1,p2间,语句为:
p0->next=p1;p2->next=p0;
如插入最后则为
p1->next=p0;p0->next=NULL;
2)插入空链表中,语句为:
p0->next=head;head=p0;
3)插入链表最前面的语句为:
p0->next=head;head=p0;
------------------------------
例12.3
结点插入链表的例子,其中head为指向链表的头指针,stud为指向插入结点的指针。
设定结构体定义为:
struct node
{ char ch;
struct node *next;
};
struct node *insert(struct node *head,struct node *stud)
{
struct node *p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL)/*成为第一个结点*/
{
head=p0;
p0->next=NULL;
}
else
{
while((p0->ch > p1->ch)&&(p1->next!=NULL))
{
p2=p1;/*p2指向p1,p1后移*/
p1=p1->next;
}
if(p0->ch<=p1->ch)
{
if(head==p1)/*插入最前面*/
head==p0;
else /*插入p2指向的结点之后*/
{
p2->next=p0;
p0->next=p1;
}
}
else /*插入最后*/
{
p1->next=p0;
p0->next=NULL;
}
}
return(head);
}
阅读(1678) | 评论(0) | 转发(0) |