先遍历两个链表,得到长度,再比较长度,循环次数为长度小的那一个链表的长度,运用尾插法插入节点。

问题描述:
先遍历两个链表,得到长度,再比较长度,循环次数为长度小的那一个链表的长度,运用尾插法插入节点。

代码展示:

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	typedef int ElemType;
	typedef struct LNode
	{
		ElemType data;
		struct LNode *next;
	}LinkNode;

	LinkNode *s1, *r1, *head1;
	head1 = (LinkNode*)malloc(sizeof(LinkNode));
	r1 = head1;
	cout << "输入L1的节点个数: ";
	int n1;
	cin >> n1;
	for (int i = 0;i < n1;i++) {				//输入链表L1
		s1 = (LinkNode*)malloc(sizeof(LinkNode));
		cin >> s1->data;
		r1->next = s1;
		r1 = s1;
	}
	r1->next = NULL;
	LinkNode *s2, *r2, *head2;
	head2 = (LinkNode*)malloc(sizeof(LinkNode));
	r2 = head2;
	cout << "输入L2的节点个数: ";
	int n2;
	cin >> n2;
	for (int i = 0;i < n2;i++) {				//输入链表L2
		s2 = (LinkNode*)malloc(sizeof(LinkNode));
		cin >> s2->data;
		r2->next = s2;
		r2 = s2;
	}
	r2->next = NULL;

			//将L1、L2的链表依次交叉插入L1中
	if (n1 < n2) {
		r1 = head1->next;
		r2 = head2->next;
		s1 = r1;
		s2 = r2;
		while (r1->next != NULL) {
			s1 = s1->next;
			s2 = s2->next;
			r1->next = r2;
			r2->next = s1;
			r1 = s1;
			r2 = s2;
		}
		r1->next = r2;
	}
	else {
		r1 = head1->next;
		r2 = head2->next;
		s1 = r1;
		s2 = r2;
		while (r2->next != NULL) {
			s1 = s1->next;
			s2 = s2->next;
			r1->next = r2;
			r2->next = s1;
			r1 = s1;
			r2 = s2;
		}
		r2->next = s1;
	}
	s1 = head1->next;
	while (s1 != NULL) {			//输出新链表L1
		cout << s1->data << ' ';
		s1 = s1->next;
	}
	r1 = head1;
	while (s1 != NULL) {			//释放空间
		s1 = r1->next;
		free(r1);
		r1 = s1;
	}
	free(head2);
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值