考研机试 链表合并

考研机试 链表合并

给定两个元素有序(从小到大)的链表,要求将两个链表合并成一个有序(从小到大)链表。

输入格式

第一行输入第一个链表的结点数 S1。

第二行输入 S1个整数,两两之间用空格隔开。

第三行输入第二个链表的结点数 S2。

第四行输入 S2个整数,两两之间用空格隔开。

输出格式

输出合并之后的链表结果,两两之间用空格隔开。

链表所以使用list 用最暴力的方法创建三个list

分别用于存放链表1链表2以及最后需要输出的链表3

一定要注意对链表初始化时

cpp 复制代码
list<int> list1(s1);//表示初始化list1 长度为s1
for(int i=0;i<s1;++i){
int a;
scanf("%d",&a);
list1.push_back(a);//这样得到的list1长度为2*s1因为push_back是在链表最后添加元素的 
}

可以初始化链表之后先打印检验一下

cpp 复制代码
//链表只能使用list
#include <iostream>
#include <list>
using  namespace std;
int main(){
    int s1,s2;
    scanf("%d",&s1);
    list<int> list1;
    list<int>::iterator it1;
    for(int i=0;i<s1;++i){
        int a;
        scanf("%d",&a);
        list1.push_back(a);
    }
    scanf("%d",&s2);
    list<int> list2;
    list<int>::iterator it2;
    for(int i=0;i<s2;++i){
        int a;
        scanf("%d",&a);
        list2.push_back(a);
    }
    for(it1=list1.begin();it1!=list1.end();++it1){
        printf("%d ",*it1);
    }
    printf("\n");
    for(it2=list2.begin();it2!=list2.end();++it2){
        printf("%d ",*it2);
    }
    printf("\n");
    //从大到小合并
    list<int> list3(s1+s2);
    list<int>::iterator it3;
    it3=list3.begin();
    for(it1=list1.begin(),it2=list2.begin();(it1!=list1.end())&&(it2!=list2.end());++it3){
        if(*it1<=*it2){
            *it3=*it1;++it1;

        }else {
            *it3=*it2;++it2;

        }
    }
    //其中一方到头了 另一方直接续上
    while(it1!=list1.end()){
        *it3=*it1;
        ++it1;
        ++it3;
    }
    while(it2!=list2.end()){
        *it3=*it2;
        ++it2;
        ++it3;
    }
    for(it3=list3.begin();it3!=list3.end();++it3){
        printf("%d ",*it3);
    }

}
相关推荐
scx201310042 分钟前
20251214 字典树总结
算法·字典树
leiming65 分钟前
MobileNetV4 (MNv4)
开发语言·算法
YGGP19 分钟前
【Golang】LeetCode 136. 只出现一次的数字
算法·leetcode
YGGP27 分钟前
【Golang】LeetCode 169. 多数元素
算法·leetcode
MC皮蛋侠客28 分钟前
distcc结合VSCode实现分布式编译的全面指南
c++·ide·分布式·vscode
顾安r30 分钟前
11.20 脚本网页 数学分支
算法·数学建模·html
少许极端34 分钟前
算法奇妙屋(二十)-回文子串/子序列问题(动态规划)
java·算法·动态规划·图解·回文串·回文序列
天赐学c语言42 分钟前
12.20 - 反转链表II && 传值和传地址的区别
数据结构·c++·算法·链表·leecode
如意鼠43 分钟前
大模型教我成为大模型算法工程师之day20: 预训练语言模型 (Pre-trained Language Models)
人工智能·算法·语言模型
_OP_CHEN43 分钟前
【算法基础篇】(三十六)图论基础之拓扑排序:从原理到实战,搞定 DAG 图的 “先后次序” 难题
c++·算法·蓝桥杯·图论·拓扑排序·算法竞赛·acm/icpc