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

本文介绍了一种高效的算法,用于合并两个循环单链表,形成一个新的带头结点的循环单链表。通过实例演示了输入输出过程,并提供了两种实现方式的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接http://codeup.cn/problem.php?cid=100000607&pid=2

题目描述
知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

代码

方法1:

#include <cstdio>
#include <cstdlib>

struct node {
	int data;
	node* next;
};

int main() {
	int n, m, data;
	while(scanf("%d",&m) != EOF) {
		node* l1 = new node;
		l1->data = NULL;
		node* r1 = l1;
		for(int i = 0; i < m; i++) {
			scanf("%d",&data);
			node* q = new node;
			q->data = data;
			r1->next = q;
			r1 = q;
		}
		scanf("%d",&n);
		node* l2 = new node;
		l2->data = NULL;
		node* r2 = l2;
		for(int i = 0; i < n; i++) {
			scanf("%d",&data);
			node* q = new node;
			q->data = data;
			r2->next = q;
			r2 = q;
		}
		r2->next = NULL;
		r1->next = l2->next;
		node* p = l1->next;
		while(p != NULL) {
			printf("%d ",p->data);
			p = p->next;
		}
		printf("\n");
	}
}

方法2:

#include <cstdio>
#include <cstdlib>

struct node {
	int data;
	node* next;
};

 void creat(node* &r, int data) {		//别忘了引用
 	node* q = new node;
	q->data = data;
	r->next = q;
	r = q;
 }
int main() {
	int m, n,data;
	while(scanf("%d",&m) != EOF) {
		node* head1 = new node;
		head1->data = NULL;
		node* r1 = head1;
		for(int i = 0; i < m; i++) {
			scanf("%d",&data);
			creat(r1, data);
		}
		node* head2 = new node;
		head2->data = NULL;
		node* r2 = head2;
		scanf("%d",&n);
		for(int i = 0; i < n; i++) {
			scanf("%d",&data);
			creat(r2, data);
		}		
		r2->next = NULL;
		r1->next = head2->next;
		node* p = head1->next;
		while(p != NULL) {
			printf("%d ",p->data);
			p = p->next;
		}
		printf("\n");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值