#includeusing 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值,小的先放到新的线性表中,大的继续比较。



