合并有序数组(由大到小)(链表基础)

合并有序数组(由大到小)(链表基础)


#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node *next;
}LNode,*LinkList;
void CreateLink(LinkList *L,int n)
{
    int i;
    LinkList p,s;
    *L=(LinkList)malloc(sizeof(LNode));//这一步一定接着写啊
    p=*L;
    p->next=NULL;
    for(i=0;i<n;i++)
    {
      s=(LinkList)malloc(sizeof(LNode));
      scanf("%d",&(s->data));
      s->next=p->next;
      p->next=s;                    //结果由大到小排序,只要在创造链表的时候由大到小排列即可
    }
    return;
}
void MergeList(LinkList *L1,LinkList *L2)
{
    LinkList p,q,L3,s,mmm;
    p=*L1;
    q=*L2;
    L3=(LinkList)malloc(sizeof(LNode));
    mmm=L3;
    mmm->next=NULL; //这三步,标准步骤
    while(p->next&&q->next)
    {
        if(p->next->data>q->next->data)
        {
            s=(LinkList)malloc(sizeof(LNode));
            s->data=p->next->data;
            mmm->next=s;
            mmm=s;
            p=p->next;
        }
        else
        {
            s=(LinkList)malloc(sizeof(LNode));  //创建新的地址,原有地址不会被删除
            s->data=q->next->data;
            mmm->next=s;
            mmm=s;
            q=q->next;
       }
    }
    mmm->next=p->next?p->next:q->next;
    LinkList head;
    head=L3;
    while(head->next)
    {
        if(head->next->next==NULL)
        printf("%d\n",head->next->data);
        else
        printf("%d ",head->next->data);
        head=head->next;//这个也记着写啊
    }
    return ;
}
int main()
{
   int n,m;
   scanf("%d%d",&n,&m);
   LinkList a,b;
   CreateLink(&a,n);
   CreateLink(&b,m);
   MergeList(&a,&b);
   return 0;
}

猜你喜欢

转载自blog.csdn.net/xigongdali/article/details/79605376