问题描述:
先遍历两个链表,得到长度,再比较长度,循环次数为长度小的那一个链表的长度,运用尾插法插入节点。
代码展示:
#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);
}
运行结果: