有序链表的归并

    xiaoxiao2021-03-25  114

    链表四:有序链表的归并 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic

    Problem Description

    分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。

    Input

    第一行输入M与N的值; 第二行依次输入M个有序的整数; 第三行依次输入N个有序的整数。

    Output

    输出合并后的单链表所包含的M+N个有序的整数。

    Example Input

    6 5 1 23 26 45 66 99 14 21 28 50 100

    Example Output

    1 14 21 23 26 28 45 50 66 99 100 #include<stdio.h> #include<stdlib.h> struct node {     int data;     struct node*next; }; struct node*creat(int n) {     struct node*p,*head,*tail;     head = (struct node*)malloc(sizeof(struct node));     head->next = NULL;     tail = head;     while(n--)     {         p = (struct node*)malloc(sizeof(struct node));         scanf("%d",&p->data);         p->next = NULL;         tail->next = p;         tail = p;     }     return head; }; void display(struct node*head) {     struct node*p;     p = head->next;     while(p!=NULL)     {         if(p->next==NULL)             printf("%d\n",p->data);         else             printf("%d ",p->data);         p = p->next;     } } int main() {     int n , m ;     struct node*head1,*head2,*p,*q,*tail;     scanf("%d%d",&n,&m);     head1 = (struct node*)malloc(sizeof(struct node));     head1 = creat(n);     head2 = creat(m);     p = head1->next;     q = head2->next;     head1->next = NULL;     tail = head1;     free(head2);     while(p&&q)     {         if(p->data > q->data)         {             tail->next = q;             tail = q;             q = q->next;         }         else         {             tail->next = p;             tail = p;             p = p->next;         }     }     if(p)         tail->next = p;     else         tail->next = q;     p = head1->next;     while(p!=NULL)     {         if(p->next == NULL)             printf("%d\n",p->data);         else             printf("%d ",p->data);             p = p->next;     }     return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-14458.html

    最新回复(0)