两个链表合并为一个链表

本文探讨了如何将两个已排序的链表高效地合并成一个单一的有序链表。通过迭代或递归的方法,我们可以合并这些链表,保持其排序顺序。详细介绍了合并过程中的关键步骤和算法实现。
//问题:给出两个链表(N、M),输入数据,将其合并成为一个链表

#include<stdio.h>
#include<stdlib.h>
using namespace std;

typedef struct Node
{
	int id;
	Node* next;
};

Node *Creat_List(int n);
void print_List(Node* L);
Node* Merge(Node* A, Node* B, int n, int m);
 
void main()
{
	int N, M;
	printf("请A链表的长度:\n");
	scanf_s("%d", &N);
	Node* A;
	printf("请输入A链表的值:\n");
	A=Creat_List(N);

	printf("请B链表的长度:\n");
	scanf_s("%d", &M);
	Node* B;
	printf("请输入B链表的值:\n");
	B=Creat_List(M);

	printf("A链表值为:\n");
	print_List(A);
	printf("B链表值为:\n");
	print_List(B);

	printf("融合后结果为:\n");
	Node* C;
	C = Merge(A, B, N, M);
	print_List(C);
}

Node* Creat_List(int n)
{
	Node *head,* p;
	head = (Node*)malloc(sizeof(Node));
	head->next = NULL;
	p = head;
	for (int i = 0; i < n; i++)
	{
		Node* s = (Node*)malloc(sizeof(Node));
		scanf_s("%d", &s->id);
		s->next = NULL;
		p->next = s;
		p = s;
	}
	return head;
}

void print_List(Node* L)
{
	Node* p;
	p = L->next;
	while (p)
	{
		printf("%-3d\n", p->id);
		p = p->next;
	}
}

Node* Merge(Node* A, Node* B,int n ,int m)
{
	Node* a, *b,*L;
	L = A;
	a = A;
	b = B;
	for (int i = 0; i < n; i++)
	{
		a = a->next;
	}
	a->next = b->next;
	return A;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值