原题链接:

leetcode-cn.com/problems/ad…

题目描述

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

示例:

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

题目解析:

题目的前提,将数字使用链接来存储,比如数字 123 ,储值为3->2->1。个位数在前,接着是十位、百位......。

要做的事情是:2个数字,都使用了链表来存储,我们需要将这两个数字相加,得到他们的和,将他们相加的结果存储成跟之前一样结构的链表。

需要做题者熟悉链表结构和链表的遍历。

思路

思路一:

链表毕竟是链表,无法直接简单地进行相加操作。所以比较容易想到的思路是,两个链表分别转化成数字,然后将两个数字相加,得到了和之后,再将结果转化成链表。

思路二:

由于是链表是个数在前,接着是十位、百位......所以可以同时遍历两个链表,然后将遍历出来的元素进行相加,将结果转化成新链表的元素。这样新链表就是题目所要求的链表。需要注意的事,相加可能会有进位出现,比如9+9=18,此时新元素应该是8,然后下一个元素的时候应该加上这个进位1。

代码(Python2)

思路一代码

 #方法一。将两个链接分别转成数组,然后转成数组,进行相加运算。得到的结果再转成数组,然后转成链表。def addTwoNumbers(self, l1, l2):""":type l1: ListNode:type l2: ListNode:rtype: ListNode"""#遍历解析第1个数head1 = l1a1 = []while (head1):a1.append(head1.val)head1 = head1.nextprint "a1=",a1#遍历解析第2个数head2 = l2a2 = []while (head2):a2.append(head2.val)head2 = head2.nextprint "a2=",a2 #将第1个数组转成数字num1 = 0len1 = len(a1)for i in range(len1):# print "i=",inum1 += a1[i]*(10**i)print "num1=",num1    #将第2个数组转成数字num2 = 0len2 = len(a2)for i in range(len2):# print "i=",inum2 += a2[i]*(10**i)print "num2=",num2num = num1 + num2print "num=",num#特殊情况,直接返回if num == 0:node = ListNode(0)return node#将num转成数组a = []i = 1while (num != 0):temp = num % (10)num = num / (10)print "temp=",tempprint "num0=",numa.append(temp)i += 1print "a=",a#将数组转成链表node = ListNode(a[0])head = nodefor i in range(1,len(a)):newNode = ListNode(a[i])head.next = newNodehead = head.nexthead.next = Nonereturn node
复制代码

思路2代码:

#方法二:同时遍历两个链表,将对应位的数子相加。如果有进位就记录下来。def addTwoNumbers(self, l1, l2):""":type l1: ListNode:type l2: ListNode:rtyp"""#头结点head = None#当前节点currentNode = None#进位carry = 0#是否第一次遍历isFirst = Truewhile (l1 or l2 or carry != 0):#置0val1 = 0val2 = 0#计算val1if l1:val1 = l1.vall1 = l1.next#计算val2if l2:val2 = l2.vall2 = l2.next#计算val,注意进位也要加val = val1 + val2 + carry#大于10的时候表示有进位if (val/10 > 0):carry = 1val = val%10else:carry = 0#创建节点node = ListNode(val)if isFirst:#第一次创建节点做特殊处理currentNode = nodehead = currentNodeisFirst = Falseelse:currentNode.next = nodecurrentNode = currentNode.nextreturn head
复制代码

谦言忘语

个人目前只懂一丁点python语法,所以不做语法上的优化,而且整体代码风格效果会尽量跟C语言趋于一致。

leetCode刷题 2. 两数相加相关推荐

  1. 学渣的刷题之旅 leetcode刷题 2. 两数相加

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

  2. leetcode刷题 2.两数相加

    解法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() ...

  3. LeetCode第二题:两数相加(Add Two Numbers)

    LeetCode第二题:两数相加(python,java) You are given two non-empty linked lists representing two non-negative ...

  4. 学渣的刷题之旅 leetcode刷题 1.两数之和

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

  5. leetcode刷题之 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例:11 给定 nums = [2, 7, 11, 15], targe ...

  6. LeetCode高频题29. 两数相除:不用加减乘除号,求加法,减法,乘法,除法

    LeetCode高频题29. 两数相除 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛 ...

  7. leetcode链表中的两数相加问题

    2. 两数相加 找出两个链表中较长的链表,原地修改后,作为最后的返回结果 两个链表从前往后遍历,考虑进位,直到短链表结束. 将长链表数值放入结果(考虑进位). 考虑是否需要额外增加一个结点来放进位 c ...

  8. LeetCode第一题:两数之和(Java)

    文章目录 前言 一.题目内容 二.解题过程 1. 解题思路 2. 解题代码 三.提交结果 总结 前言 坚持下去便可胜利.只要心还在,梦想还在,我们还可以坚持直至胜利.没有过不去的坎,只有害怕的心.莫害 ...

  9. 【LeetCode每周算法】两数相加

    题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是 ...

最新文章

  1. [译] 通过视图控制器容器和子视图控制器避免庞大的视图控制器
  2. ZooKeeper架构设计及其应用要点
  3. Openshift API部分源码学习笔记(一)
  4. 深入理解C#:编程技巧总结(一)
  5. 卸载一直在创建还原点_如何创建系统还原点以及如何恢复?
  6. python 窗口函数_太好用了!Python中8种流行的SQL窗口函数了解一下!
  7. Map接口与学习系列(二)---LinkedHashMap
  8. 获取aplicationContext对象,从而获取任何注入的对象
  9. Linux常用命令(持续更新)
  10. linux中grep的例子,Linux下grep命令使用实例
  11. Mono 2.11.3 发布包含微软的 Entity Framework
  12. Python + ElasticSearch:轻松玩转跨越千年的两百三十万条地震数据
  13. 【2023秋招】网易雷火游戏研发工程师笔试
  14. 新浪微博平台的多级架构
  15. python算法之lowb排序三人组(冒泡排序,插入排序,选择排序)
  16. Magento1.9x 下新建多个站点
  17. 宏的录制之工资条的制作
  18. python3.6从入门到精通mobi_Python 3.6零基础入门与实战epub
  19. 对高校深入开展翻转课堂的建议
  20. Python 之父加入微软

热门文章

  1. opencv实现二值图像细化的算法
  2. web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
  3. c语言随机浮点数,C随机浮点数生成
  4. android action pick,Intent中各种常见的Action
  5. java写事物提交_fabric-sdk-java 提交事务
  6. ioc spring 上机案例_IOC(控制反转)—最后的爱,是放手
  7. zuul 启动 threw exception_SpringCloud-Zuul-网关路由过滤器
  8. websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
  9. Java访问权限(详尽版)
  10. arc diff 指定版本号_Phabricator客户端安装