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

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容