PTA -7-51 两个有序链表序列的合并(C++)

简介: 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例:1 2 3 4 5 6 8 10

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。


输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。


输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。


输入样例:

1 3 5 -1

2 4 6 8 10 -1


输出样例:

1 2 3 4 5 6 8 10


代码  

#include <bits/stdc++.h>
using namespace std;
typedef struct LNode{
    int date;
    struct LNode *next;
}LNode,*LinkList;
LinkList read()
{
    LNode*op,*l;
    l = new LNode;
    l->next = NULL;
    l->date = -1;
    op = l;
    int date;
    cin>>date;
    while(date!=-1)
    {
        LNode *p;
        p = new LNode;
        p->date = date;
        p->next = NULL;
        op->next = p;
        op = op->next;
        cin>>date;
    }
    return l;
}
void print(LinkList l)
{
    LNode *p = l;
    p = l->next;
    int flag = 1;
    while(p)
    {
        flag = 0;
        cout<<p->date;
        p = p->next;
        if(p)
        cout<<" ";
    }
    if(flag)
        cout<<"NULL";
}
LinkList merge(LinkList l1,LinkList l2)
{
    LNode *p1,*p2;
    p1 = l1->next;
    p2 = l2->next;
    LinkList l3;
    l3 = new LNode;
    l3->next=NULL;
    LNode *q = l3;
    while(p1 && p2)
    {
        if(p1->date < p2->date)
        {
            q->next = p1;
            p1 =p1->next;
        }
        else{
            q->next =p2;
            p2 =p2->next;
        }
        q = q->next;
    }
    if(p1)
        q->next = p1;
    else 
        q->next = p2;
    return l3;
}
int main()
{
    LinkList l1,l2,l3;
    l1 = read();
    l2 = read();
    l3 = merge(l1,l2);
    print(l3);
}


相关文章
|
3月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
56 0
Leetcode第21题(合并两个有序链表)
|
3月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
120 0
|
5月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
48 2
|
7月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
5月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
39 1
|
5月前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表
|
6月前
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
45 8
【数据结构OJ题】合并两个有序链表
|
5月前
|
传感器 定位技术 C++
基于C++的GDAL用空白栅格填充长时间序列遥感影像中的缺失图像
然后,定义需要处理的遥感影像路径列表,和识别数据缺失的逻辑。这里我们简化处理,假设已经知道哪一幅图像是缺失的,因此直接跳过识别步骤。
67 1
|
5月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
6月前
|
Java
力扣经典150题第五十八题:合并两个有序链表
力扣经典150题第五十八题:合并两个有序链表
49 2