您的位置:首页 > 其它

单链表建立、插入、逆序

2013-11-20 22:39 134 查看
//建立数据
typedef struct student
{
int data;
struct student * next;
}node;

//建立单链表
node * create()
{
node *head,*p,*s;
int x,cycle=1;

head = (node *)malloc( sizeof(node) );
p=head;

while(cycle)
{
//读入数据
printf("Please input the data:\n");
scanf("%d",&x);

if(x!=0)
{
s=(node *)malloc( sizeof(node) );
s->data=x;

p->next=s;
p=s;
}
else   cycle=0;
}

p->next = NULL;
head=head->next;

return head;
}
//单链表逆序

node * reverse(node * head)
{
node *p1, *p2, *p3;
if(head==NULL || head->next==NULL)
return head;
p1=head;
p2=p1->next;
while(p2)
{
p2->next = p3;
p2->next = p1;
p1=p2;
p2=p3;
}
head->next=NULL;
head = p1;
return head;
}
//单链表插入有序链表,不改变链表原有顺序
node * insert(node *head, int num)
{
node *p0, *p1, *p2;
p0=(node *)malloc(sizeof(node));
p0->data=num;
p1=head;
while(num>p1->data && p1->next!=NULL)
{ p2=p1;p1=p1->next;}
if(p1->data>=num)
{ if(p1==head)
{
p0->next = head;
head = p0;
 }
else
   {
p2->next=p0;
p0->next=p1;
}
 }
else
  {p1->next=p0;
p0->next = NULL;
  }
return head;
}
//单链表删除
node * del(node *head, int num)
{
node *p1,*p2;
  p1=head;
while(p1!=NULL && num!=p1->data)
  {p2=p1;p1=p1->next;}
if(p1==NULL)
  printf("没找到");
 elseif(p1==head)
  head=head->next;
else
   {
   p2->next=p1->next;
}
return head;
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐