夏令营兵王要整队(C语言)

题意:

三天夏令营,一生军旅情。

你作为一个特种兵兵王,首先要做的就是把小特种兵们按照高矮顺序排好。现在小特种兵们已经在你面前有序从低到高站成两排。你需要做的就是将两个队伍合并在一起,同时保持递增顺序。

输入格式:

两个升序链表。每行第一个数是链表结点数

输出格式:

合并后的新升序链表。


在这里给出一组输入。例如:

3
1 2 4
2
3 6

输出样例:

在这里给出相应的输出。例如:

1 2 3 4 6

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


代码如下(示例):

#include 
#include 
typedef struct qq{
    int k;
    struct qq *next;
}az;
az *create(int n){
    az *head=(az *)malloc(sizeof(az)),*tail=head;
    for(int i=0;inext=NULL;
    scanf("%d",&p->k);
    tail->next=p;
    tail=tail->next;
    }
    return head;
}
void swap_link(az *h,az *hh,az *o){
    if(o->next!=NULL){
        h->next=o;
        hh->next=o->next;
        o->next=hh;
        }else{
        h->next=o;
        o->next=hh;
        hh->next=NULL;
        }
}
void sort_link(az *q,int n){
    az *h=q,*hh=q->next,*o=hh->next;
    for(int i=n-2;i>0;i--){
        for(int j=0;j<=i;j++){
          if(hh->k > o->k){
          swap_link(h,hh,o);
              az *p=o;
              o=hh;
              hh=p;
          }
            if(o->next!=NULL){
                h=h->next;
                hh=hh->next;
                o=o->next;
            }
        }
        h=q;hh=h->next;o=hh->next;
    }
}
void look(az *q,int n){
    az *t=q->next;int cnt=0;
    while(1){
        printf("%d",t->k);
        cnt++;
        if(cnt!=n) printf(" ");
        else{return;}
        if(t->next!=NULL){t=t->next;}
        }
}
int main(){
    int n;
    scanf("%d",&n);
    az *pp=create(n);
    int m;
    scanf("%d",&m);
    az *qq=create(m),*q=qq;
    while(qq->next!=NULL) qq=qq->next;
    qq->next=pp->next;
    free(pp);pp=NULL;
    sort_link(q,m+n);
    look(q,n+m);
    return 0;
}

你可能感兴趣的:(c语言,开发语言)