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

2021-05-20  本文已影响0人  放开那个BUG

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读