1、随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。
2、遍历单向链表。
3、把单向链表中元素逆置(不允许申请新的结点空间)。
4、在单向链表中删除所有的偶数元素结点。
5、编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。
6、利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
7、利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。
8、编写一个主函数,调试上述算法。
#include <stdio.h>
#include <stdlib.h>
#define Elemtype int
typedef struct node
{
Elemtype data;
struct node *next;
} Lnode;
void creat(Lnode *h)
{
int data;
Lnode *p=h,*pp;
scanf("%d",&data);
while(data!=-1)
{
pp=(Lnode*)malloc(sizeof(Lnode));
pp->next=NULL;
pp->data=data;
p->next=pp;
p=pp;
scanf("%d",&data);
}
}
void bianli(Lnode *h)
{
h=h->next;
while(h!=NULL)
{
printf("%d ",h->data);
h=h->next;
}
puts("");
}
void nizhi(Lnode *h)
{
Lnode *p1=h,*p2;
p1=h->next;
h->next=NULL;
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
p2->next=NULL;
p2->next=h->next;
h->next=p2;
}
}
void deleted(Lnode *h)
{
Lnode *p1,*p2;
p1=h;
p2=h->next;
while(p2!=NULL)
{
if(p2->data%2==0)
{
p1->next=p2->next;
free(p2);
p2=p1->next;
}
else
{
p1=p2;
p2=p2->next;
}
}
}
void charu(Lnode *h,Lnode *tt)
{
Lnode *ll=h->next,*ss=h;
if(h->next==NULL)
{
h->next=tt;
return;
}
while(ll->data<tt->data&&ll->next!=NULL)
{
// printf("%d\n",ll->data);
ss=ll;
ll=ll->next;
}
if(ll->next!=NULL)
{
tt->next=ss->next;
ss->next=tt;
}
else
{
if(ll->data>tt->data)
{
tt->next=ss->next;
ss->next=tt;
}
else
{
tt->next=ll->next;
ll->next=tt;
}
}
}
/*void creat2(Lnode *h)
{
int data,f=0;
Lnode *p=h,*pp,*ll=h->next,*ss=h;
scanf("%d",&data);
while(data!=-1)
{
pp=(Lnode*)malloc(sizeof(Lnode));
pp->next=NULL;
pp->data=data;
if(h->next==NULL)
{
p->next=pp;
p=pp;
}
else
for(ll=h->next,ss=h;ll!=NULL;ll=ll->next)
{ printf("*%d\n",ll->data);
if(ll->data<data)
continue;
else
{
pp->next=ss->next;
ss->next=pp;
break;
}
ss=ll;
}
else
{
while(ll->data<=data)
{
ss=ll;
ll=ll->next;
}
pp->next=ss->next;
ss->next=pp;
}
ll=h->next;
ss=h;
scanf("%d",&data);
}
}*/
void creat2(Lnode *h)
{
int data;
Lnode *p=h,*pp;
scanf("%d",&data);
while(data!=-1)
{
pp=(Lnode*)malloc(sizeof(Lnode));
pp->next=NULL;
pp->data=data;
charu(p,pp);
scanf("%d",&data);
}
}
void hebing(Lnode *h1,Lnode *h2)
{
Lnode *p1,*p2;
p1=h2->next;
while(p1!=NULL)
{ p2=p1;
p1=p1->next;
charu(h1,p2);
}
}
int main()
{
Lnode *h=(Lnode*)malloc(sizeof(Lnode));
h->next=NULL;
creat(h);
printf("遍历结果:");
bianli(h);
nizhi(h);
printf("逆置结果:");
bianli(h);
deleted(h);
printf("删除结果:");
bianli(h);
Lnode *tt=(Lnode*)malloc(sizeof(Lnode));
printf("输入插入数:");
scanf("%d",&tt->data);
charu(h,tt);
printf("插入结果:");
bianli(h);
Lnode *h1=(Lnode*)malloc(sizeof(Lnode));
h1->next=NULL;
creat2(h1);
printf("创建非递减有序链表h1结果:");
bianli(h1);
Lnode *h2=(Lnode*)malloc(sizeof(Lnode));
h2->next=NULL;
creat2(h2);
printf("创建非递减有序链表h2结果:");
bianli(h2);
printf("合并结果为:");
hebing(h1,h2);
bianli(h1);
return 0;
}