力扣刷题笔记-21 合并两个有序链表

其实不回答就是答案

双指针

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;
        ListNode p1 = list1,p2 = list2;
        while (p1 != null && p2 != null){
            if (p1.val > p2.val){
                p.next = p2;
                p2 = p2.next;
            } else {
                p.next = p1;
                p1 = p1.next;
            }
            p = p.next;
        }
        if (p1 != null){
            p.next = p1;
        }
        if (p2 != null) {
            p.next = p2;
        }
        return dummy.next;
    }
}

思想

  1. 两个指针分别指向两个链表
  2. 新的链表,dummy是虚拟头节点,(现在还不知道为啥这么做)
  3. p1和p2对比,谁小,谁连接到新的链表的,末尾
  4. while循环的条件是两个链表都不为空
  5. 如果有一个为空,那就结束了
  6. 然后把剩下那个不为空的直接p.next = p1/2

tips

  1. p是新链表的指针,是从虚拟头节点也就是-1开始的,所以你需要进行后移去接收新的数据,也就是p.next
  2. 为了方便对比,每次p1/2用完之后,后移一下。也就是被比较的,要主动后移
posted @ 2024-05-09 20:28  大海0101  阅读(3)  评论(0编辑  收藏  举报