博客
关于我
精选力扣500题 第23题 LeetCode 2. 两数相加【c++详细题解】
阅读量:781 次
发布时间:2019-03-24

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

那么,我们就来一步一步实现这个问题。我们需要定义一个链表来表示数字,并把两个逆序的链表相加,返回结果的逆序链表。

###思路

  • 问题分析:给出两个逆序链表,分别表示两个整数,我们需要返回它们相加的和,也表示为逆序链表。链表中的每个节点只能存储一位数字,并且两个数都不会以0开头。
  • 模拟竖式加法:我们可以从链表的第一个节点(最低位)开始,逐位相加,并处理进位。
  • 使用虚拟头节点:为了简化边界处理,我们创建一个虚拟头节点,作为结果链表的起点。
  • 处理循环:继续处理直到所有节点都被处理,并且没有剩余的进位。
  • ###代码实现

    /* 节点的定义 */class ListNode {    int val;    ListNode next;    ListNode(int val) {        this.val = val;        this.next = null;    }}class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        // 创建虚拟的头节点        ListNode dummy = new ListNode(-1);        ListNode current = dummy;        int t = 0;        // 处理循环,直到所有节点和进位处理完毕        while (l1 != null || l2 != null || t != 0) {            // 初始化t为0,开始处理当前位数和进位            t = 0;            // 如果有两个节点,则都加上去            if (l1 != null) {                t += l1.val;                l1 = l1.next;            }            if (l2 != null) {                t += l2.val;                l2 = l2.next;            }            // 将当前位数添加到结果链表中            current.next = new ListNode(t % 10);            current = current.next;            // 更新进位            t /= 10;        }        return dummy.next;    }}

    ###解释

  • 虚拟头节点:创建一个虚拟的头节点dummy,作为结果链表的起始点。这个虚拟节点的下一个节点是我们的结果链表的起点。
  • 处理循环:使用一个循环,确保我们处理了所有节点以及可能的进位。循环条件是至少有一个节点存在或者还有进位需要处理。
  • 逐位相加:在每次循环中,首先将l1l2当前节点的值加到t上。然后,继续处理进位。
  • 处理进位:t除以10得到新的进位,t%10作为当前位数,添加到结果链表中。
  • 返回结果:虚拟头节点的下一个节点即为我们的最终结果链表,返回这个节点。
  • 这种方法确保了我们正确地处理了所有可能的进位,包括最高位的进位,确保结果链表是正确的。

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

    你可能感兴趣的文章
    Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
    查看>>
    Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
    查看>>
    Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
    查看>>
    Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
    查看>>
    Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
    查看>>
    Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
    查看>>
    Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
    查看>>
    Mysql学习总结(78)——MySQL各版本差异整理
    查看>>
    Mysql学习总结(79)——MySQL常用函数总结
    查看>>
    Mysql学习总结(7)——MySql索引原理与使用大全
    查看>>
    Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
    查看>>
    Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
    查看>>
    Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
    查看>>
    Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
    查看>>
    Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
    查看>>
    Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
    查看>>
    Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
    查看>>
    Mysql学习总结(9)——MySql视图原理讲解与使用大全
    查看>>
    Mysql学习笔记 - 在Centos7环境下离线安装Mysql
    查看>>
    MySQL学习笔记十七:复制特性
    查看>>