题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路

设立一个表示进位的变量carried,建立一个新链表, 把输入的两个链表从头往后同时处理,每两个相加,将结果加上carried后的值作为一个新节点到新链表后面。

关键点解析

  1. 链表这种数据结构的特点和使用

  2. 用一个carried变量来实现进位的功能,每次相加之后计算carried,并用于下一位的计算

考虑两种特殊情况:

  1. 长度不相等 123 + 45678
  2. 有进位的情形 11 + 99 = 110

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:tmp = p = ListNode()f = 0while l1 or l2 or f:f += (l1.val if l1 else 0) + (l2.val if l2 else 0)p.next = ListNode(f % 10)p = p.nextf = f // 10l1 = l1.next if l1 else 0l2 = l2.next if l2 else 0return tmp.next

C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* tmp = nullptr;ListNode* cur = nullptr;int f = 0;while(l1 != nullptr || l2 != nullptr || f != 0){f += (l1 == nullptr ? 0 : l1->val) + (l2 == nullptr ? 0 : l2->val);auto temp = new ListNode(f % 10);f = f / 10;if(cur == nullptr){cur = temp;tmp = temp;}else{cur->next = temp;cur = cur->next;}l1 = l1 == nullptr ? nullptr : l1->next;l2 = l2 == nullptr ? nullptr : l2->next;}return tmp;}
};

【LeetCode刷题-中等】2. 两数相加(python c++)相关推荐

  1. 力扣刷题-单链表两数相加

    分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...

  2. 【leetcode】力扣刷题(2):两数相加(go语言)

    一.问题描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  3. leetcode刷题:2.两数之和

    本篇博客介绍如何找到两数之和.获取相加的两个数获取最终target的方法. 先看如下图: 我们很容易想到暴力解法.即两次循环获取结果,第一次循环循环黑圈,我们先假定第一个黑圈中1,是我们要的数,然后接 ...

  4. LeetCode刷题笔记——001两数之和

    题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用 ...

  5. 【leedcode刷题1】两数之和

    [leedcode刷题 1]两数之和 大家好,小生不才,从今天开始将自己刷题的过程记录在博客中,因为能力有限,所以如果有什么错的地方希望大家积极指正,不胜感激. 题目 给定一个整数数组 nums 和一 ...

  6. LeetCode刷题笔记- 15.三数之和

    LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...

  7. python【力扣LeetCode算法题库】2-两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  8. 【leetcode刷题】21.三数之和——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 一题二写,三数之和,题解四瞅五瞄六瞧,水平还七上八下九流,十分辣鸡. --leetcode此题热评 前言 哈喽,大家好,我是一条. ...

  9. 简单算法题:leetcode-2 两数相加

    算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...

  10. Leetcode 2 两数相加 Python

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

最新文章

  1. java 3gpp转mp3_Android音频以及音频播放器开发实例
  2. dedecms首页如何调用专题页描述和链接
  3. python dbscan 如何确定eps参数_如何选择eps和minPts(DBSCAN算法的两个参数)以获得有效结果?...
  4. pyqt5绘画API
  5. RMAN SET NEWNAME
  6. delphi 到出execl2010 文件损坏_Win7系统出现explorer.exe损坏的图像的解决方法是什么?...
  7. MySQL sql99语法介绍
  8. SpringSecurity加密认证
  9. python中什么是按位取反_Python学习中的“按位取反”笔记总结
  10. Swagger介绍及使用
  11. 防护疫情防御插画|后疫情时代宣传不可小觑
  12. VmWare工作笔记001---弹出错误提示无法连接mks:套接字连接尝试次数太多
  13. 电脑桌面打开计算机后出现两部分,为什么当打开电脑时,桌面会出现两个我的文档的窗口,是不是中病毒了,怎么处理啊...
  14. vim打开bin文件
  15. 站在知乎肩上-做更强的自己(4)
  16. ESP32 系列之 ESP-IDF 官方构建方案
  17. request body is missing
  18. MySQL专题二——SELECT语法
  19. python csv 大文件_python 快速把超大txt文件转存为csv的实例
  20. 往自己脖子以上的投资永远不会贬值

热门文章

  1. 浙江大学数据结构第一讲:1.1什么是数据结构
  2. 我的大学,被初恋女友甩了!
  3. ubuntu18.04 xamp框架搭建
  4. python爬取京东商品评价信息
  5. Java-面向对象构造函数 -(private private)关键字
  6. 桌面运维成功考证HCIP,我是如何下定决心改变的
  7. Acwing-4728. 乘方
  8. 32位计算机装64位操作系统,电脑应该装32位还是64位系统?
  9. 5个月的精华:Spring/SpringBoot扩展点手册:手册在手,编码无忧:全网独一份 - 第451篇
  10. 树莓派3代ROS系统镜像文件下载链接