博客
关于我
No.021:Merge Two Sorted Lists
阅读量:436 次
发布时间:2019-03-06

本文共 1788 字,大约阅读时间需要 5 分钟。

合并两个已排序的链表是一个常见的问题,目标是将两个链表拼接成一个新的链表,并返回其第一个节点。本文将详细介绍如何实现这一过程。

输入节点情况

首先,我们需要考虑输入链表可能存在null的情况。具体来说:

  • 如果其中一个链表为空,直接返回另一个链表的头节点。
  • 如果两个链表都为空,则返回null。
  • 节点定义

    节点的定义如下:

    class ListNode {
    public int val;
    public ListNode next;
    public ListNode prev;
    }

    实现步骤

  • 初始化变量

    • 创建一个新的链表来保存结果。
    • 使用一个指针记录上一个节点,用于拼接新的链表。
    • 确定第一个节点,确保较小的节点作为基准链表。
  • 比较节点值

    • 比较当前两个链表的节点值,决定哪个作为基准链表。
    • 交换两个链表的位置,确保基准链表始终指向较小的节点。
  • 遍历链表

    • 将当前基准链表的节点连接到上一个节点的后面。
    • 更新上一个节点指针。
    • 移动基准链表指针到下一个节点,继续比较和拼接。
  • 处理剩余节点

    • 当其中一个链表遍历完毕时,将剩下的另一条链表连接到结果链表的末尾。
  • 返回结果

    • 返回结果链表的第一个节点。
  • 代码实现

    public class ListNode {
    public int val;
    public ListNode next;
    public ListNode prev;
    public ListNode(int val) {
    this.val = val;
    }
    }
    public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    // 处理空链表情况
    if (l1 == null) {
    return l2;
    }
    if (l2 == null) {
    return l1;
    }
    // 初始化结果链表
    ListNode result = new ListNode(0);
    ListNode last = result;
    // 确定第一个节点
    if (l1.val > l2.val) {
    // 交换l1和l2的位置
    ListNode temp = l1;
    l1 = l2;
    l2 = temp;
    }
    // 开始遍历并拼接
    while (true) {
    // 将当前l1节点连接到结果链表
    last.next = l1;
    last = last.next;
    // 移动l1指针到下一个节点
    if (l1.next == null) {
    // 当l1遍历完毕,将l2拼接到结果链表
    l1.next = l2;
    break;
    }
    l1 = l1.next;
    // 比较当前节点的值,并交换位置
    if (l1.val > l2.val) {
    // 交换l1和l2的位置
    ListNode temp = l2;
    l2 = l1;
    l1 = temp;
    }
    }
    return result.next;
    }
    }

    总结

    该算法通过交换节点的位置和逐步拼接的方式,确保了两个链表合并后的链表是有序的。代码结构清晰,逻辑简单易懂,适合处理各种边界情况。

    转载地址:http://soyyz.baihongyu.com/

    你可能感兴趣的文章
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx Lua install
    查看>>
    Nginx upstream性能优化
    查看>>
    Nginx 中解决跨域问题
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>