链表

#include"stdio.h"

#include"stdlib.h"

#define ERROR 0

#define OK  1





typedef struct node

{

 int  data;

 struct node *next;

}node, *linklist;



void creatfifo(linklist &l,int n)

{

 linklist p,q;

 int i;

 l=(linklist)malloc(sizeof(node));

 l->next=NULL;

 p=l;

 for(i=1;i<=n;i++)

 {

  q=(linklist)malloc(sizeof(node));

  scanf("%d",&q->data);

  p->next=q;

  p=q;

 }

 p->next=NULL;

}



void print(linklist l)

{

 linklist p;

 p=l->next;

 while(p)

 {

  printf("%d ",p->data);

  p=p->next;

 }

 printf("\n");

}



int charu(linklist &l,int i,int e)

{

	int j;

	linklist p,s;

	p=l;

	j=0;

	while(p&&j<i-1){p=p->next;++j;}

	if(!(p->next)||j>i-1)return ERROR;

	s=(linklist)malloc(sizeof(node));

	s->data=e;s->next=p->next;

	p->next=s;

	return OK;

}



int shanchu(linklist &l,int i,int &e)

{

	int j;

	linklist p,q;

	p=l;j=0;

	while(p->next&&j<i-1){p=p->next;++j;}

	if(!(p->next)||j>i-1)return ERROR;

	q=p->next;p->next=q->next;

	e=q->data;free(q);

	return OK;

}





int hebing(linklist &l,linklist &k,linklist &h)

{

	linklist  l1,k1,h1;

	l1=l->next;k1=k->next;

	h=h1=l;

	while(l1&&k1){

		if(l1->data<=k1->data){h1->next=l1;h1=l1;l1=l1->next;

		}  

		else{h1->next=k1;h1=k1;k1=k1->next;}

	}

	h1->next=l1?k1:h1;

	free(k);

	return 0;

} 



int main()

{

	linklist l,k,h;

	int n,e,i,m;

	scanf("%d",&n);

	creatfifo(l,n);

	print(l);

	printf("请输入在第几个位置插入100\n");

	e=100;

	scanf("%d",&i);

	charu(l,i,e);

	print(l);

    scanf("%d",&i);

	shanchu(l,i,e);

	print(l);

	printf("请输入第二个链表的个数\n");

	scanf("%d",&m);

	creatfifo(k,m);

	print(k);

	hebing(l,k,h);

	print(l);

}

  

你可能感兴趣的:(链表)