算法题:剑指 Offer 25. 合并两个排序的链表(题目+思路+代码+注释)时空 O(N) O(1) 1ms击败68%、70%用户

在这里插入图片描述

题目

剑指 Offer 25. 合并两个排序的链表

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

示例1:

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

0 <= 链表长度 <= 1000

注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

其实就是搞个循环不断的从两个链上去拿第一个节点,比较大小,拿最小的,一个个节点的把新链组装好。遍历掉两条链就完成了。很简单,是个简单题不多解释,代码有注释。

代码

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // ret 是第一个节点,用来返回,p是用来存当前正在处理的节点
        ListNode ret = null,p = null;
        //两个链上还有数据
        while (l1 !=null || l2 != null){
            //暂存从两根链上取出哪个节点
            ListNode t = null;
            if (l1 != null && l2 != null){
                //两条链都有节点
                if (l1.val > l2.val){
                    t = l2;
                    l2 = l2.next;
                }else {
                    t = l1;
                    l1 = l1.next;
                }
            }else if (l1 != null){
                //只有第一条链有节点
                t = l1;
                l1 = l1.next;
            }else {
                //只有第二条链有节点
                t = l2;
                l2 = l2.next;
            }
            //如果还没有头结点
            if (p == null){
                ret = p = t;
            }else {
                //正在处理的节点的下一个节点等于取到的节点
                p.next = t;
                //当前节点往下一个移
                p = p.next;
            }
        }
        return ret;
    }
posted @ 2021-08-29 18:18  HumorChen99  阅读(0)  评论(0编辑  收藏  举报  来源