问题 C: 最快合并链表(线性表)

痞子三分冷 提交于 2020-02-01 00:10:09

题目描述
知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
输入

m=5

3 6 1 3 5

n=4.

7 10 8 4

输出
3 6 1 3 5 7 10 8 4

样例输入

7
3 5 1 3 4 6 0
5
5 4 8 9 5

样例输出

3 5 1 3 4 6 0 5 4 8 9 5

#include <cstdio>
#include <cstdlib>
using namespace std;
struct node{
    int num;
    node* next;
};
node* create(int n)
{
    node* head, *p, *pre;
    head = new node;
    head->next = NULL;
    pre = head;
    for(int i = 0 ; i < n ; ++i)
    {
        p = new node;
        scanf("%d", &p->num);
        pre->next = p;
        p->next = head;
        pre = p;
    }
    return head;
}
node* merge(node* &a, node* &b)
{
    node* temp1, *temp2;
    node* head1 = a;
    temp1 = a->next;
    while(temp1->next != head1)
    {
        temp1 = temp1->next;
    }
    temp1->next = b->next;
    node* head2 = b;
    temp2 = b->next;
    while(temp2->next != head2)
        temp2 = temp2->next;
    temp2->next = head1;
    return head1;
}
int main()
{
    int m, n;
    scanf("%d", &m);
    node* a = create(m);
    /*node* head1 = a;
    a = a->next;
    while(a != head1)
    {
        printf("%d ", a->num);
        a = a->next;
    }*/
    scanf("%d", &n);
    node* b = create(n);
    node* c = merge(a, b);
    node* head = c;
    c = c->next;
    while(c->next != head)
    {
        printf("%d ", c->num);
        c = c->next;
    }
    printf("%d\n", c->num);
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!