题目描述
知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);
}
来源:CSDN
作者:Sho.Sakurai
链接:https://blog.csdn.net/weixin_41414657/article/details/104123351