Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- typedef int info_t;
- typedef struct element
- {
- info_t info;
- struct element *link;
- } node;
- main()
- {
- node *p,*q,*r;
- node *mk_link_list(int);
- void printlist (node *);
- node *joinList(node *, node *);
- int n;
- scanf("%d",&n);
- p=mk_link_list(n);
- scanf("%d",&n);
- q=mk_link_list(n);
- r=joinList(p,q);
- printlist(r);
- printf("\n\n");
- }
- node *mk_link_list(int n)
- {
- node *p=NULL,*q=NULL;
- while(n--)
- {
- p=(node *)malloc(sizeof(node));
- p->link=q;
- q=p;
- }
- while(q!=NULL)
- {
- scanf("%d",&q->info);
- q=q->link;
- }
- return(p);
- }
- void printlist (node *p)
- {
- node *q = p;
- int n=0, i;
- while(q!=NULL){
- n++;
- q=q->link;
- }
- for(i=0; i<n;i++){
- if(i==(n-1)){
- printf("%d\n", p->info);
- p=p->link;
- }
- else{
- printf("%d ",p->info);
- p=p->link;
- }
- }
- }
- node *joinList(node *p, node *q)
- {
- node *r,*s, *k;
- if ((p==NULL)||(q==NULL)) return NULL;
- if((p->info)<(q->info))
- {
- s=r=p;
- p=p->link;
- }
- else if((p->info)>(q->info))
- {
- s=r=q;
- q=q->link;
- }
- else{
- s = r = p;
- q =(*q).link;
- p = (*p).link;
- }
- while((p!=NULL)&&(q!=NULL))
- {
- if((p->info)<(q->info)){
- if(p->info == r->info){
- p = p->link;
- }
- else{
- r->link=p;
- r=p;
- p=p->link;
- }
- }
- else if((p->info)>(q->info)){
- if((q->info)==(r->info)){
- q = q->link;
- }
- else{
- r->link=q;
- r=q;
- q=q->link;
- }
- }
- else if((p->info)==(q->info)){
- if(r==q){
- p=(*p).link;
- } else {
- q =(*q).link;
- }
- }
- }
- if (p!=NULL)
- {
- while(p!=NULL)
- {
- if (p->info==r->info)
- p=p->link;
- else
- {
- r->link=p;
- p=p->link;
- r=r->link;
- }
- }
- }
- if(q!=NULL)
- {
- while(q!=NULL)
- {
- if (q->info==r->info)
- {
- q=q->link;
- }
- else
- {
- r->link=q;
- q=q->link;
- r=r->link;
- }
- }
- }
- if(p!=NULL)
- r->link=p;
- else
- r->link=q;
- return(s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement