Leetcode 21. 合并两个有序链表

155 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

  • 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

二、思路分析

  • 这道题考察我们对于链表的掌握程度
    • 首先创建一个元素用于赋值
    • 取两个链表元素的val值进行比较,谁小,就将他变成我们创建节点的下一个节点,并将当前节点的next节点更新为当前节点
    • 如果,哪个链表为空了,我们链表的next指针就指向剩余的链表

三、AC 代码:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //创建节点
        ListNode res = new ListNode();
        //赋值给用于操作的节点
        ListNode cur = res;
        //边界条件
        while(l1!=null&&l2!=null){
            //谁小就指向谁
            if(l1.val<=l2.val){
                cur.next = l1;
                l1 = l1.next;
            }else{
                cur.next = l2;
                l2 = l2.next;
            }
            cur = cur.next;
        }
        //谁为空,next节点就指向另一个链表
        if(l1 == null){
            cur.next = l2;
        }
        if(l2 == null){
            cur.next = l1;
        }
        //返回结果
        return res.next;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 创建节点,并赋值给操作用的节点

    • next指针的指向问题,以及如果一个链表为null,就指向另一个链表

    • 返回创建节点的next节点

最后这个算法是Leetcode的第21题,是热题100的第12题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!