Chinaunix首页 | 论坛 | 博客
  • 博客访问: 614670
  • 博文数量: 151
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1664
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-13 16:37
文章分类

全部博文(151)

文章存档

2010年(16)

2009年(135)

我的朋友

分类: C/C++

2009-08-26 17:24:25

链表的插入
链表的插入可能会有以下几种意见:
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);
 }

 
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~