点击上方蓝字关注我们

1、LeetCode | 2.两数相加

2、LeetCode | 206.反转链表

3、LeetCode | 1.两数之和

4、LeetCode | 703.数据流中的第K大元素

5、LeetCode | 232.用栈实现队列

6、LeetCode | 225.用队列实现栈

7、LeetCode | 20.有效的括号

8、LeetCode | 141.环形链表

9、LeetCode | 24.两两交换链表中的节点

这次来写一下 LeetCode 的第 21 题,合并两个有序链表。

题目描述

题目直接从 LeetCode 上截图过来,题目如下:

上面的题就是 合并两个有序链表 题目的截图,同时 LeetCode 会根据选择的语言给出了一个类的定义或者函数的定义,然后在其中实现 合并两个有序链表 的解题过程。这次我使用 C 语言来进行完成。

C 语言给出的函数定义如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){}

通过函数定义可以看出,mergeTwoLists 函数的参数是两个单向链表,然后返回值也是一个链表,我们要做的就是把两个有序的链表合并成一个新的有序链表。

问题分析

这个题目中提供的两个链表本身就是有序的链表,只要我们把链表的节点逐个的遍历并比较一遍,就可以合并为另外一个有序的列表。

我们来看一下下面的两幅图,当 链表 l1 节点上的值 和 链表 l2 节点上的值 进行比较时,只要 l1 节点上的值 小于等于 链表 l2 节点上的值,那么我们就取 链表 l1 节点上的值 放入 新的链表节点 上,并将指向 链表 l1 节点的指针 移动到下一个元素。反之,则将 链表 l2 节点上的值 放入 新的链表节点 上,并将指向 链表 l2 节点的指针 移动到下一个元素。

在两个有序链表节点个数相同的时候,这样做是没有问题的,如果两个有序链表节点个数不相同的话,那么当一个链表的所有节点已经遍历完,那么就去遍历剩下的一条链表即可。如下图。

代码实现

C 语言的代码如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){    struct ListNode* ll1 = l1;    struct ListNode* ll2 = l2;    struct ListNode* ll = NULL;    struct ListNode* cur = NULL;    while (ll1 != NULL || ll2 != NULL) {        struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));        tmp->next = NULL;        // 初始化新节点的指针        if (cur == NULL) {            cur = tmp;            ll = tmp;        } else {    // 当前节点指针的下一个节点            cur->next = tmp;            cur = tmp;        }        // ll1为NULL后,遍历链表ll2        if (ll1 == NULL) {            tmp->val = ll2->val;            ll2 = ll2->next;            continue;        }        // ll2为NULL后,遍历链表ll1        if (ll2 == NULL) {            tmp->val = ll1->val;            ll1 = ll1->next;            continue;        }        // ll1节点的当前值小于等于ll2节点的当前值        // 则把ll1节点的当前值放入tmp节点中        if (ll1->val <= ll2->val) {            tmp->val = ll1->val;            ll1 = ll1->next;        } else {            tmp->val = ll2->val;            ll2 = ll2->next;        }    }    return ll;}

代码中有了详细的注释,就不对代码做过多的解释了。

提交结果

在写完代码后,点击右下角的 “执行代码”,然后观察 “输出” 和 “预期结果” 是否一致,一致的话就点击 “提交” 按钮。点击 “提交” 按钮后,系统会使用更多的测试用例来测试我们写的函数体,如果所有的测试用例都通过了,那么就会给出 “通过” 的字样,如果没有通过,会给出失败的那一组测试用例,我们可以根据给出的测试用例来继续修改代码。我们的代码提交后的截图如下:

喜欢就点在看哦~

两个有序链表序列的交集_LeetCode | 21.合并两个有序链表相关推荐

  1. 两个有序链表序列的交集

    7-52 两个有序链表序列的交集 (20 分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3. 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用− ...

  2. PTA : 函数题 7-3 两个有序链表序列的交集 (20 分)

    大一下本期数据结构 数据结构题目集 两个有序链表序列的交集 (20 分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3. 输入格式: 输入分两行,分别在每行给出由若干个正 ...

  3. 【LeetCode】【HOT】21. 合并两个有序链表(递归)

    [LeetCode][HOT 100]21. 合并两个有序链表 文章目录 [LeetCode][HOT 100]21. 合并两个有序链表 package hot;import java.util.Ar ...

  4. [递归|迭代] leetcode 21 合并两个有序链表

    [递归|迭代] leetcode 21 合并两个有序链表 1.题目 题目链接 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2 ...

  5. leetcode 21 java_LeetCode 21. 合并两个有序链表

    LeetCode 21. 合并两个有序链表 题目 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-> ...

  6. Java实现 LeetCode 21 合并两个有序链表

    21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  7. LeetCode 21. 合并两个有序链表(链表)

    上一篇博客:LeetCode 20. 有效的括号(栈.字符串)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...

  8. 21. 合并两个有序链表 JavaScript实现

    21. 合并两个有序链表 合并有序链表 一.递归 递归详解 /*** Definition for singly-linked list.* function ListNode(val, next) ...

  9. 两个有序链表序列的交集 (20分)(最佳解法)

    题目描述: 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3. 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列 ...

最新文章

  1. shell 脚本 自动发送邮件
  2. 持志助中华 九州初志开创国内集群存储新时代
  3. c# socket接收字符串_Python高级编程之 Socket 编程
  4. 鹤峰:美丽的茶乡——人物篇
  5. DreamFactory 第9章 性能注意事项
  6. WinAPI: waveOutPause - 暂停播放
  7. JavaScript——Prototype详探
  8. iostream, istream 和 ostream的区别
  9. I00004 贝尔三角形(解法二)
  10. 烟花背景的3D打字魔方相册(末尾附加下载地址)
  11. OCL功率放大电路分析笔记
  12. 【干货】S7-PLCSIM Advanced V3.0 无法下载组态(搜索到设备地址为红色)问题解决方法
  13. 最新100个微信小程序
  14. java杨辉三角奇数_杨辉三角中的奇数与偶数
  15. C1模拟试卷的一个算法题
  16. python3中利用serial模块实现单片机与python上位机的通信(串口调试助手)
  17. 转贴: 浅析多声道LPCM TRUE HD DTS HD之异同
  18. 看图解HTTP 笔记
  19. Recsys2021 | 推荐系统论文整理和导读
  20. 一个桔子功效等同五味药

热门文章

  1. 电脑开启上帝模式,300多个系统功能都在这里!
  2. 第八节:ES6为数组做了哪些扩展?
  3. java接口自动化demo_第一个java 接口自动化程序
  4. java 读取txt文件指定行_在Java中读取txt文件中的特定行
  5. 人类基因组计划20周年!中科院付巧妹团队登Science特刊,从古DNA中一窥人类演化...
  6. 你可能也看过这个生物学家转行后创造的价值 120 亿美元的动画
  7. 全系统翻译 macOS Monterey这个新功能简直了
  8. 1.9 编程基础之二分查找 12 最长平台 python
  9. Python报错SyntaxError: (unicode error) ‘utf-8‘ codec can‘t decode byte 0xc5 in position 0: invalid
  10. Java笔记-模拟QQ三方登录(单点登录2.0)