#include<iostream>
using namespace std;
int const MAX_SIZE = 100;
struct ListNode { //定义线性表的结构体
int val;
};
class MyList { //定义线性表的类
private:
ListNode* L;
int length;
public:
MyList();
~MyList();
void CreatList(int n); //创建线性表
void MergeList(MyList& L1, MyList& L2, MyList& L3); //合并线性表
void print(); //打印线性表
};
void MyList::print() {
if (length == 0) {
cout << "NULL LIST" << endl;
return;
}
else {
for (int i = 1; i <= length; i++) {
cout << L[i].val << " ";
}
cout << endl;
}
}
void MyList::CreatList(int n) {
length = n;
cout << "输入数组中的值:" << endl;
for (int i = 1; i <= n; i++) {
//cout << "输入第" << i << "个值: ";
cin >> L[i].val;
}
}
MyList::MyList() {
L = new ListNode[MAX_SIZE];
length = 0;
}
MyList::~MyList(){
length = 0;
delete[] L;
}
void MyList::MergeList(MyList& L1, MyList& L2, MyList& L3) { //将两个不递减的线性表按照不递减的顺序放到新的线性表中
int i = 1, j = 1, k = 0;;
int la = L1.length, lb = L2.length;
L3.length = L1.length + L2.length;
while (i <= la && j <= lb) { //分别遍历两个线性表
if (L1.L[i].val < L2.L[j].val) { //若L1的val 小于L2的val,L3的val中放入L1的val
L3.L[++k].val = L1.L[i].val;
i++;
}
else { //若L2的val 小于L1的val,L3的val中放入L2的val
L3.L[++k].val = L2.L[j].val;
j++;
}
}
while (i <= la) {
L3.L[++k].val = L1.L[i].val;
i++;
}
while (j <= lb) {
L3.L[++k].val = L2.L[j].val;
j++;
}
}
void implement() {
MyList L1, L2, L3;
int n1, n2;
cout << "输入L1 的大小" << endl;
cin >> n1;
cout << "输入L2 的大小" << endl;
cin >> n2;
L1.CreatList(n1);
L2.CreatList(n2);
L3.MergeList(L1, L2, L3);
L3.print();
}
int main() {
implement();
}
测试结果:
ps:核心思路就是:同时开始遍历两个线性表,并比较两个线性表的val值,小的先放到新的线性表中,大的继续比较。