归并两个递增序列链表为一个递减有序链表

来源:互联网 发布:郑州办公软件培训 编辑:程序博客网 时间:2024/06/06 12:27

描述:

假设有两个按元素值递增有序排列的线性表a和b,均以单链表作为存储结构,请编程实现将表a和表b归并成一个按元素值递减有序排列的线性表c(注意:非严格递减,也就是说本题中的数据有可能相等),并要求利用原表的结点空间构造c表。

输入:

第一行先输入两个小于100的正整数m,n,第二行从小到大的输入m个整数,第三行从小到大的输入n个整数。

输出:

归并这两个序列为一个递减的序列c,用链表存储,之后输出按顺序输出链表c的值,每个数占一行。

输入样例:

4 3
2 6 6 10
3 10 50

输出样例:

50
10
10
6
6
3
2

#include <iostream>#include <cstdio>#include <cstdlib>#define MAXSIZE 2000using namespace std;typedef struct node{    int data;    struct node *next;}LNode;void Creat_LinkList(LNode **head,int n){    LNode *p;    int x;    (*head) = (LNode*)malloc(sizeof(LNode));    (*head)->next = NULL;    while(n--)    {        p = (LNode*)malloc(sizeof(LNode));        scanf("%d",&x);        p->data = x;        p->next = (*head)->next;        (*head)->next = p;    }}void Del_LinkList(LNode *head){    LNode *p;    p = head -> next;    head ->next = p->next;    free(p);}void print(LNode *h){    LNode *p;    p=h->next;    while(p!=NULL)    {        printf("%d\n",p->data);        p=p->next;    }}LNode *Deal_LinkList(LNode *a,LNode *b){    LNode *p,*q,*c;    c = (LNode*)malloc(sizeof(LNode));    c->next = NULL;    p = c;    q=p;    while((a->next!=NULL)&&(b->next)!=NULL)    {        if((a->next)->data > (b->next)->data)        {            p = (LNode*)malloc(sizeof(LNode));            p->data = (a->next)->data;            p->next = NULL;            q->next = p;            q=p;            Del_LinkList(a);        }        else        {            p = (LNode*)malloc(sizeof(LNode));            p->data = (b->next)->data;            p->next = NULL;            q->next = p;            q=p;            Del_LinkList(b);        }    }    if(b->next == NULL&&a->next!=NULL)    {        p->next = a -> next;        a->next = NULL;    }    if(a->next == NULL&&b->next !=NULL)    {        p->next = b ->next;        b->next = NULL;    }    return c;}int main(){    int m, n;    LNode *a,*b,*c;    scanf("%d%d",&m,&n);    Creat_LinkList(&a,m);    Creat_LinkList(&b,n);    c = Deal_LinkList(a,b);    print(c);    return 0;}
0 0
原创粉丝点击