广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(2.两个数字相加)
  • 137
分享到

C++实现LeetCode(2.两个数字相加)

2024-04-02 19:04:59 137人浏览 八月长安
摘要

[LeetCode] 2. Add Two Numbers 两个数字相加 You are given two non-empty linked lists rep

[LeetCode] 2. Add Two Numbers 两个数字相加

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

这道并不是什么难题,算法很简单,链表的数据类型也不难,就是建立一个新链表,然后把输入的两个链表从头往后撸,每两个相加,添加一个新节点到新链表后面。为了避免两个输入链表同时为空,我们建立一个 dummy 结点,将两个结点相加生成的新结点按顺序加到 dummy 结点之后,由于 dummy 结点本身不能变,所以用一个指针 cur 来指向新链表的最后一个结点。好,可以开始让两个链表相加了,这道题好就好在最低位在链表的开头,所以可以在遍历链表的同时按从低到高的顺序直接相加。while 循环的条件两个链表中只要有一个不为空行,由于链表可能为空,所以在取当前结点值的时候,先判断一下,若为空则取0,否则取结点值。然后把两个结点值相加,同时还要加上进位 carry。然后更新 carry,直接 sum/10 即可,然后以 sum%10 为值建立一个新结点,连到 cur 后面,然后 cur 移动到下一个结点。之后再更新两个结点,若存在,则指向下一个位置。while 循环退出之后,最高位的进位问题要最后特殊处理一下,若 carry 为1,则再建一个值为1的结点,代码如下:

c++ 解法: 


class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *dummy = new ListNode(-1), *cur = dummy;
        int carry = 0;
        while (l1 || l2) {
            int val1 = l1 ? l1->val : 0;
            int val2 = l2 ? l2->val : 0;
            int sum = val1 + val2 + carry;
            carry = sum / 10;
            cur->next = new ListNode(sum % 10);
            cur = cur->next;
            if (l1) l1 = l1->next;
            if (l2) l2 = l2->next;
        }
        if (carry) cur->next = new ListNode(1);
        return dummy->next;
    }
};

Java 解法:


public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int d1 = l1 == null ? 0 : l1.val;
            int d2 = l2 == null ? 0 : l2.val;
            int sum = d1 + d2 + carry;
            carry = sum >= 10 ? 1 : 0;
            cur.next = new ListNode(sum % 10);
            cur = cur.next;
            if (l1 != null) l1 = l1.next;
            if (l2 != null) l2 = l2.next;
        }
        if (carry == 1) cur.next = new ListNode(1);
        return dummy.next;
    }
}

在 CareerCup 上的这道题还有个 Follow Up,把链表存的数字方向变了,原来是表头存最低位,现在是表头存最高位,请参考另一篇文档 2.5 Add Two Numbers 两个数字相加 。

到此这篇关于C++实现LeetCode(两个数字相加)的文章就介绍到这了,更多相关C++实现两个数字相加内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(2.两个数字相加)

本文链接: https://www.lsjlt.com/news/130124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现LeetCode(2.两个数字相加)
    [LeetCode] 2. Add Two Numbers 两个数字相加 You are given two non-empty linked lists rep...
    99+
    2022-11-12
  • C++如何实现LeetCode两个数字相加
    这篇文章将为大家详细讲解有关C++如何实现LeetCode两个数字相加,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。[LeetCode] 2. Add Two Numbers 两个数字相加You are ...
    99+
    2023-06-20
  • LeetCode如何实现两个数字相加
    小编给大家分享一下LeetCode如何实现两个数字相加,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,...
    99+
    2023-06-19
  • C++实现算法两个数字相加详解
    Add Two Numbers 两个数字相加 You have two numbers represented by a linked list, where each n...
    99+
    2022-11-12
  • C++如何实现算法两个数字相加
    这篇文章主要为大家展示了“C++如何实现算法两个数字相加”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何实现算法两个数字相加”这篇文章吧。Add Two Numbers 两个数字相加Yo...
    99+
    2023-06-20
  • C++实现LeetCode(29.两数相除)
    [LeetCode] 29. Divide Two Integers 两数相除 Given two integers dividend and divi...
    99+
    2022-11-12
  • php怎么实现两个数字相加
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php实现两个数字相加1、使用“+”加法运算符“+”运算符就是用于加法计算的。示例:<php $a = -100; $b = 70; ec...
    99+
    2019-04-20
    php 两数字相加
  • php如何实现两个数字相加
    这篇“php如何实现两个数字相加”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现两个数字相加”文章吧。php实现...
    99+
    2023-06-29
  • C语言怎么实现两个整数相加
    这篇文章主要介绍“C语言怎么实现两个整数相加”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言怎么实现两个整数相加”文章能帮助大家解决问题。使用 scanf() 来接收输入, printf() 与...
    99+
    2023-06-17
  • C++中怎么利用LeetCode实现两数相除
    这篇文章将为大家详细讲解有关C++中怎么利用LeetCode实现两数相除,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。[LeetCode] 29. Divide Two Integers 两...
    99+
    2023-06-20
  • C++实现LeetCode(67.二进制数相加)
    [LeetCode] 67. Add Binary 二进制数相加 Given two binary strings a and b, return...
    99+
    2022-11-12
  • Android实现两个数相加功能
    本文实例为大家分享了Android实现两个数相加的具体代码,供大家参考,具体内容如下 要实现如图所示的加法计算器的话,还是比较简单的,下面直接上demo,有不懂的可以留言交流。...
    99+
    2022-06-06
    Android
  • Java C++题解leetcode消失的两个数字实例
    目录题目要求思路:数学推导JavaC++Rust总结题目要求 思路:数学推导 不重复的数组序列可以根据高斯公式计算所有元素的总和:用当前数组长度加上两个缺失的数字可以得到所有数字长...
    99+
    2022-11-13
  • C++实现LeetCode(201.数字范围位相与)
    [LeetCode] 201.Bitwise AND of Numbers Range 数字范围位相与 Given a range [m, n] where 0 <=...
    99+
    2022-11-12
  • C++实现LeetCode(43.字符串相乘)
    [LeetCode] 43. Multiply Strings 字符串相乘 Given two non-negative integers num1 and...
    99+
    2022-11-12
  • java中两个字符串的拼接、整数相加和浮点数相加实现代码
    编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加,并输出结果。要进行异常处理,对输入的不符合要求的字符串提示给用...
    99+
    2022-11-12
  • C++实现LeetCode(两个有序数组的中位数)
    [LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数 There are two sorted arrays nums1...
    99+
    2022-11-12
  • 怎么在java中实现两个大数相加
    怎么在java中实现两个大数相加?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码如下:public class BigIntAdd {priva...
    99+
    2023-05-30
    java
  • C++如何实现LeetCode两个有序数组的中位数
    这篇文章主要讲解了“C++如何实现LeetCode两个有序数组的中位数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现LeetCode两个有序数组的中位数”吧![LeetCode...
    99+
    2023-06-20
  • C语言怎么实现两个浮点数相乘
    本篇内容主要讲解“C语言怎么实现两个浮点数相乘”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现两个浮点数相乘”吧!输入两个浮点数,计算乘积。实例#include <stdio....
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作