Leetcode21:合并两个有序链表

一、题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

输入:l1 = [], l2 = []
输出:[]

输入:l1 = [], l2 = [0]
输出:[0]

二、题解

思路:分别用两个指针遍历两个链表,再用一个指针专门改变链表的指向。
一开始先找出头更小的那个链表作为头节点,依次取出两个指针指向的链表元素,谁小,就改变当前节点的指向,让当前节点始终指向更小的元素。两个指针一直前进,当指向为空时,遍历结束。

在这里插入图片描述

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
   
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
   
        if (list1 == null) {
   
            return list2;
        }
        if (list2 == null) {
   
            return list1;
        }
        //头节点指针
        ListNode head;
        //操作链表1的指针
        ListNode cur1 = list1;
        //操作链表2的指针
        ListNode cur2 = list2;

        //比较两个链表的头节点谁小谁就作为新的头
        if (list1.val < list2.val) {
   
            head = list1;
            cur1 = list1.next;
        } else {
   
            head = list2;
            cur2 = list2.next;
        }
        ListNode pre = head;

        while (true) {
   
            //遍历完了list1,让pre直接指向list2
            if (cur1 == null) {
   
                pre.next = cur2;
                break;
            }
            //遍历完了list2,让pre直接指向list1
            if (cur2 == null) {
   
                pre.next = cur1;
                break;
            }
            int val1 = cur1.val;
            int val2 = cur2.val;

            if (val1 <= val2) {
   
                pre.next = cur1;
                pre = pre.next;
                cur1 = cur1.next;
            } else {
   
                pre.next = cur2;
                pre = pre.next;
                cur2 = cur2.next;
            }
        }
        return head;
    }
}

相关推荐

  1. Leetcode21 合并有序

    2024-02-08 00:56:01       36 阅读
  2. Leetcode 21合并有序

    2024-02-08 00:56:01       31 阅读
  3. [leetcode] 21. 合并有序

    2024-02-08 00:56:01       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 00:56:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 00:56:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 00:56:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 00:56:01       18 阅读

热门阅读

  1. Xilinx FPGA——在线升级

    2024-02-08 00:56:01       33 阅读
  2. 【力扣hot100】刷题笔记Day4

    2024-02-08 00:56:01       36 阅读
  3. SpringBoot实现即时通讯

    2024-02-08 00:56:01       24 阅读
  4. Centos7部署MetaBase-v0.48.3

    2024-02-08 00:56:01       32 阅读
  5. 【力扣】复写零,栈+双指针法

    2024-02-08 00:56:01       31 阅读
  6. LeetCodeLCR 114. 火星词典——拓扑排序

    2024-02-08 00:56:01       32 阅读
  7. Kylin系统下Qt的各种中文问题解决思路

    2024-02-08 00:56:01       33 阅读
  8. 1755. 最接近目标值的子序列和

    2024-02-08 00:56:01       32 阅读
  9. zstd字典压缩的大数据生产实践 & ctf逆向出题启发

    2024-02-08 00:56:01       28 阅读
  10. typedef 与#define 的概念及区别?

    2024-02-08 00:56:01       30 阅读
  11. 工具--Git详解

    2024-02-08 00:56:01       34 阅读
  12. MySQL数据库基础与SELECT语句使用梳理

    2024-02-08 00:56:01       25 阅读
  13. 查看 iOS 系统的日志或崩溃日志

    2024-02-08 00:56:01       31 阅读
  14. 如何使用 uniapp 开发(一)

    2024-02-08 00:56:01       36 阅读
  15. C++进阶--C++11包装器

    2024-02-08 00:56:01       26 阅读