2-6 两个有序序列的中位数(20分)

发布于:2022-12-14 ⋅ 阅读:(394) ⋅ 点赞:(0)

#include <stdio.h>
#include <stdlib.h>
//设置为带头结点
typedef struct ListNode
{
    int data;
    struct ListNode *next;
}LN,*LP;

LP Read(int n)
{
    /**创建新节点*/
    LP head=(LP)malloc(sizeof(LN));
    head->next=NULL;
    /**头节点创建完成*/

    LP p;
    int temp;
    for(int i=0 ; i<n ; i++)
    {
        scanf("%d",&temp);
        //printf("%d\n",temp);
        /**创建新节点*/
        LP newLN=(LP)malloc(sizeof(LN));
        newLN->next=NULL;
        newLN->data=temp;
        //printf("%d\t",newLN);
        /**新节点创建完成*/
        if(head->next==NULL)
        {
           // printf("Yes\n");
            head->next=newLN;
            p=newLN;
           // printf("%d\n",head->next);
        }
        else
        {
            p->next=newLN;
            p=newLN;
           // printf("%d\n",p->data);
        }

    }
   // printf("成功输入!");
    return head;
}

void Print(LP head,int n)
{
    LP p=head->next;
    for(int i=0 ; i<n ; i++)
    {
        printf("%d",p->data);
        p=p->next;
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    LP head=Read(n),head2=Read(n);

    LP p=head->next,p2=head2->next,pre;
    int x=0;
    while(p!=NULL&&p2!=NULL)
    {
        if(p->data>p2->data)//模拟存储小数值
        {
            pre=p2;
            p2=p2->next;
        }
        else if(p->data<p2->data)
        {
            pre=p;
            p=p->next;
        }
        else
        {
            pre=p;
            p=p->next;
        }
        x++;
        if(x==n)
        {
            printf("%d",pre->data);
            return 0;
        }
    }
    
    return 0;
}