leetcode-JZ25

Posted Alan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-JZ25相关的知识,希望对你有一定的参考价值。

题面

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

限制:

0 <= 链表长度 <= 1000

原题链接

分析

设置两个节点big和small,big节点的值永远大于等于small节点的值

源代码(注释部分即为思路)

/**
 * 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;
        }

        ListNode* big = l2;
        ListNode* small = l1;
        ListNode* ret = l1;
        
        //big节点的值永远大于等于small节点的值
        if(l1->val <= l2->val){
            big = l2;
            small = l1;
            ret = l1;
        }
        else{
            big = l1;
            small = l2;
            ret = l2;
        }
        
        //让small遍历结束即可
        while(small!=NULL){
            ListNode* pre;
            //while循环里有2个条件,2个条件的先后顺序很重要,需要把small!=NULL放在前面
            while(small!=NULL && (small -> val) <= (big -> val)){
                //pre是small的前序节点
                pre = small;
                small = small->next;
            }
            
            pre->next = big;
            
            //维护small和big节点
            if(small!=NULL){
                if(small->val > big->val){
                    ListNode* tmp = small;
                    small = big;
                    big = tmp;
                }
            }
        }
        return ret;

    }
};

以上是关于leetcode-JZ25的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-JZ31

片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

刷新片段不再起作用?

Python代码阅读(第25篇):将多行字符串拆分成列表

如何使用支持库 25.0.0 及更高版本获取片段()

sh 片段25