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;
}
}