1. 链表合并问题解析
链表合并是数据结构与算法中的经典问题,也是面试中的高频考点。这个问题看似简单,却蕴含着许多值得深入探讨的技术细节。让我们从一个实际案例出发,逐步拆解这个问题的解决方案。
给定两个已经按升序排列的链表,我们需要将它们合并为一个新的有序链表。这个问题在实际开发中有着广泛的应用场景,比如合并多个有序数据流、数据库的归并操作等。
1.1 问题输入输出分析
输入格式要求:
- 第一行:第一个链表的节点数S1
- 第二行:S1个用空格分隔的整数
- 第三行:第二个链表的节点数S2
- 第四行:S2个用空格分隔的整数
输出要求:
- 合并后的有序链表,元素间用空格分隔
示例输入:
code复制4
2 4 6 8
3
3 5 7
对应输出:
code复制2 3 4 5 6 7 8
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础解法:合并后排序
2.1 实现思路
最直观的解法是将两个链表的所有元素合并到一个容器中,然后进行排序。这种方法简单直接,适合链表长度较小的情况。
cpp复制#include<iostream>
#include<list>
using namespace std;
int main() {
int S1;
while(cin >> S1) {
list<int> l1;
int temp;
for(int i = 1; i <= S1; i++) {
cin >> temp;
l1.push_back(temp);
}
int S2;
cin >> S2;
for(int i = 1; i <= S2; i++) {
cin >> temp;
l1.push_back(temp);
}
l1.sort();
for(auto it = l1.begin(); it != l1.end(); it++) {
cout << *it << " ";
}
