LeetCode刷题笔记(二)两数相加

原创 2018年04月14日 23:11:33
题目:

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

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

示例:

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

ListNode类

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
解法:
class Solution {
    ListNode result = new ListNode(0);  //定义计算结果的node
    ListNode head = result;             //头节点
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        add(l1,l2,0);
        return head.next;
    }
     //递归计算   addNumber是进位
    public void add(ListNode l1, ListNode l2,int addNumber){
        if(l1 != null || l2 != null){
            int num = (l1==null?0:l1.val) + (l2==null?0:l2.val) + addNumber;    
            addNumber = num/10;     //计算进位
            num = num%10;     
            ListNode node = new ListNode(num);
            result.next = node;    
            result = node;
            add(l1==null?l1:l1.next,l2==null?l2:l2.next,addNumber);
        }else if(addNumber!=0){
            result.next = new ListNode(addNumber);
        }   
    }   
}

算法如上,从头节点开始递归进行加法,进位赋值给addNumber,个位数部分创建新的节点,让result节点的next指向新的节点,再把result节点更换为新节点,进行下一次计算,当两个节点都为空的时候,退出递归。

注意点:两个链表长度不一样时要进行判断,如果节点为null,补0计算。退出递归时,要把最后的进位加上。

时间复杂度:O(n);

空间复杂度:O(n);

leetcode题库:2.两数相加

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -&amp...
  • Rong_Toa
  • Rong_Toa
  • 2018-04-14 11:06:17
  • 33

LeetCode第2题:Add Two Numbers

问题描述:给定两个非空的链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。 添加两个数字并将其作为链表返回。 测试代码: #include using namespace std...
  • HW140701
  • HW140701
  • 2017-03-29 12:07:16
  • 1193

给出两个表示两个非负整数的非空链表。数字以相反的顺序存储,它们的每个节点都包含一个数字。添加两个数字,并将其作为链接列表返回。

链表定义: public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }具体实现代码如...
  • qq297877375
  • qq297877375
  • 2018-01-22 21:50:17
  • 347

链表相加

给定两个链表,分别表示两个非负整数。他们的数字逆序存储在链表中,且每个节点只存储一个数字,计算两个数的和,并且返回和的链表头指正。 如:输入1->2>3 8->7->7 输出:0->0->0->1  ...
  • u014360070
  • u014360070
  • 2016-07-20 20:36:01
  • 1651

[LeetCode] Add Two Numbers 两数相加

给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: 输入...
  • u014627807
  • u014627807
  • 2018-02-20 22:49:03
  • 811

给定两个链表表示的整数,编写函数对这两个整数求和,并用链表形式返回结果。

struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {...
  • liuyanfeier
  • liuyanfeier
  • 2016-06-03 15:09:20
  • 1976

算法学习 1、链表相加

最近准备学习算法,学习的过程中做一点小总结。小菜鸟,对C++使用不熟练,写的有点笨拙,不对的地方希望帮忙指正,万分感谢! 题目:给定两个链表,分别表示两个非负整数。它们的数字逆序存储在链表中,并且...
  • SunCherryDream
  • SunCherryDream
  • 2016-07-13 10:04:05
  • 904

【LeetCode】2.两数相加 结题报告 (C++)

题目地址:https://leetcode-cn.com/problems/add-two-numbers/description/问题描述:给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,...
  • qq_32805671
  • qq_32805671
  • 2018-04-10 16:38:07
  • 11

leetcode 2.两数相加

题目链接:传送门 2. 两数相加 题目描述提示帮助提交记录社区讨论阅读解答 给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表...
  • qq_33505303
  • qq_33505303
  • 2018-04-08 10:09:16
  • 36

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】

有两个单链表,代表两个非负数,每一个节点代表一个数位,数字是反向存储的,即第一个结点表示最低位,最后一个结点表示最高位。求两个数的相加和,并且以链表形式返回。对两个链表都从第一个开始处理,进行相加,结...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-16 07:10:21
  • 6588
收藏助手
不良信息举报
您举报文章:LeetCode刷题笔记(二)两数相加
举报原因:
原因补充:

(最多只允许输入30个字)