美文网首页
LeetCode 第21题:合并两个有序链表

LeetCode 第21题:合并两个有序链表

作者: 放开那个BUG | 来源:发表于2021-05-20 16:35 被阅读0次

    1、前言

    题目描述

    2、思路

    有序链表合并看上去是个简单的题目,但是根据两个有序链表比较大小来更改指针的指向时发现,直接更改指向并不可靠,必须需要一个前序 last 节点来记录上一个操作节点的前一个节点,然后慢慢画图才知道怎么更改指针指向。我就是用此方法来做的,然后整个过程写的比较麻烦。

    需要前一个节点的角度是正确的,但是我们应该站在 last 的角度来连接节点。比如,创建一个 dummy 节点,赋予 p = dummy,然后根据 l1 和 l2 的值进行比较来决定 p 指向哪个节点,然后 p 移动到指向的节点。

    3、代码

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dummy = new ListNode();
            ListNode p = dummy;
    
            while(l1 != null && l2 != null){
                if(l1.val <= l2.val){
                    p.next = l1;
                    l1 = l1.next;
                }else {
                    p.next = l2;
                    l2 = l2.next;
                }
                p = p.next;
            }
            
            if(l1 != null){
                p.next = l1;
            }
            if(l2 != null){
                p.next = l2;
            }
    
            return dummy.next;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第21题:合并两个有序链表

          本文链接:https://www.haomeiwen.com/subject/rcqudltx.html