/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)//判断有一组为空的情况
return l2;
if(l2==NULL)
return l1; if(l1->val>l2->val)//由于我设计的算法问题,需要明确知道第一个值谁小,不妨用l1小,若不满足,就倒一下
return mergeTwoLists(l2,l1);
ListNode* res=l1;//保存头指针,留待返回
while(l2!=NULL)
{
while(l1->next!=NULL && l1->next->val<=l2->val)//直到找出l1下一个比当前l2值大的数,且不能为空
l1=l1->next;
if(l1->next==NULL)//只要额外判断l1下个为空的情况,这个值肯定不会比l2大
{
l1->next=l2;
break;
}
ListNode* l2_next=l2->next;//一定要记住当前l2的下个节点
l2->next=l1->next;//这里一定要画图,特清晰,不画要崩溃
l1->next=l2;//注意这里l1指针停在新加入的节点处
l1=l1->next;
l2=l2_next;//即便l2为空也不要紧啊
} return res;
}
};

分析:

这次做的挺好的,只有一处错误,就是忘了设置l1的第一个值一定小于l2的第一个值。其他没有任何错误,做的如此顺利的原因在于我通过画图举例,尽可能把所有案例都想到了,然后对比图示写的(链表不画图纯靠脑子我会懵),好吧其实还是这个题简单。

这个题给我做题的经验,就是先画图,举例,实现一般功能的案例,然后是边界,然后看算法行不,不行怎么办,最后总结好了再写,不然边写边想会写不好也想不对,万一要换算法就更麻烦了。

leecode第二十一题(合并两个有序链表)的更多相关文章

  1. LeetCode第二十一题-对两个有序链表排序

    Merge Two Sorted Lists 问题简介:合并两个已排序的链表并将其作为新链表返回 举例: 输入: 1->3->5, 1->2->4 输出: 1->1-&g ...

  2. 【leetcode 简单】 第七题 合并两个有序链表

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

  3. 【leetcode 简单】第二十题 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  4. LeetCode第二十三题-合并n个有序链表

    Merge k Sorted Lists 问题简介:合并k个已排序的链表并将其作为一个排序链表返回. 举例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  5. leecode刷题(23)-- 合并两个有序链表

    leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...

  6. Leecode刷题之旅-C语言/python-21.合并两个有序链表

    /* * @lc app=leetcode.cn id=21 lang=c * * [21] 合并两个有序链表 * * https://leetcode-cn.com/problems/merge-t ...

  7. 【python】【补】Leetcode每日一题-合并两个有序数组

    [python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...

  8. LeetCoded第21题题解--合并两个有序链表

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

  9. LeetCode初级算法--链表02:合并两个有序链表

    LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  10. <每日 1 OJ> -LeetCode 21. 合并两个有序链表

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

随机推荐

  1. Linux笔记 #08# shell编程从零开始到低配学生管理系统

    先熟悉一下基本语法(运行环境是装git的时候一起装的那个windows下的bash): #!/bin/bash # 实现两个函数 # appendToFile()追加一行到文件 # readFile( ...

  2. Failed to load ApplicationContext

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...

  3. centos7开放及查看端口

    centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下: firewall-cmd --zone=public --add-port=80/tcp --perm ...

  4. django 存在则忽略, 不存在则创 TagSheet.objects.get_or_create(tag='test')

    django 存在则忽略, 不存在则创 TagSheet.objects.get_or_create(tag='test')

  5. windows composer 安装,使用新手入门

    一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extension=php_openssl.dll 3.下载php_s ...

  6. 01: Django rest framework 基础

    1.1 RESTful API设计规范 参考地址: http://www.cnblogs.com/wupeiqi/articles/7805382.html   1.API与用户的通信协议,总是使用H ...

  7. Codeforces 839A Arya and Bran

    Bran and his older sister Arya are from the same house. Bran like candies so much, so Arya is going ...

  8. gcc,make,cmake

    1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C.C++.Objective-C.Fortran.Java等等 ...

  9. topcoder srm 335 div1

    problem1 link 直接模拟即可. import java.util.*; import java.math.*; import static java.lang.Math.*; public ...

  10. Python3 tkinter基础 Canvas bind 鼠标左键点击时,在当前位置画椭圆形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...