LeetCode 2 - Add Two Numbers

原创 2015年09月06日 12:28:56

Add Two Numbers

题目链接

https://leetcode.com/problems/add-two-numbers/

问题描述

You are given two linked lists representing two non-negative numbers. 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.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

解题思路

创建一个新链表作为返回,同时遍历L1和L2,手工实现十进制加法,结果采用尾插法写入新链表

Tips:
1. L1和L2可能长度不同,需对空结点进行处理
2. 最后一位可能产生进位,需单独处理

代码实现(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* L = new ListNode(-1);     // 新链表头结点
        ListNode* p = L;    // 工作指针

        int ca = 0;    // 进位标记
        int v1, v2, sumValue, realValue;

        while (l1 || l2) {
            v1 = l1 ? l1->val : 0;
            v2 = l2 ? l2->val : 0;
            sumValue = v1 + v2 + ca;

            realValue = sumValue % 10;
            ca = sumValue / 10;

            l1 = l1 ? l1->next : nullptr;
            l2 = l2 ? l2->next : nullptr;

            p->next = new ListNode(realValue);
            p = p -> next;
        }

        if (ca > 0) {
            p -> next = new ListNode(ca);
        }

        return L -> next;
    }
};

效率

对两个链表均只遍历一遍,时间复杂度: O(n)
需要生成新的链表,空间复杂度: O(n)

【python】【leetcode】【算法题目2—Add Two Numbers】

【python】【leetcode】【算法题目2—Add Two Numbers】 题目原文: You are given two linked lists representing two non-...
  • u014615155
  • u014615155
  • 2016年11月21日 12:05
  • 1790

(LeetCode)算法题目——Add Two Numbers

Add Two Numbers
  • lh470342237
  • lh470342237
  • 2017年07月31日 22:47
  • 55

【leetcode】Add Two Numbers 解析以及拓展

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r...
  • u013378502
  • u013378502
  • 2014年08月10日 10:19
  • 631

LeetCode刷题之第一题——Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in rever...
  • smilebluesky
  • smilebluesky
  • 2016年02月24日 21:41
  • 330

【Leetcode问题搬运翻译】Add two numbers

/** *本篇文章均为本人翻译,原问题链接:点击打开链接 */ 问题描述:你被给予两个非空链表,分别代表两个非负整数。这些数字以倒序的方式存储并且他们的每个节点都包含一个数字。添加两个数...
  • HeyWeCome
  • HeyWeCome
  • 2017年08月10日 10:50
  • 274

【leetcode】【单链表,queue】【2】Add Two Numbers

#include #include using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x...
  • ruan875417
  • ruan875417
  • 2015年05月15日 18:48
  • 246

#2 Add Two Numbers (链表作加法)

#2 Add Two Numbers (链表作加法)题目地址:Add Two Numbers 题目分类:链表。Linked List 题目难度:Midium题目You are given two ...
  • u011497904
  • u011497904
  • 2015年04月01日 20:35
  • 300

Add Two Numbers问题及解法

问题描述: You are given two non-empty linked lists representing two non-negative integers. The digits...
  • u011809767
  • u011809767
  • 2017年02月16日 09:17
  • 480

第十五周(Add Two Numbers)

第十四周(subsets,NP问题) 目录: 本周完成题目 主要过程思路 相关代码 一、本周完成题目 本周共完成2道题目,2道Medium。主要是关于子集的两个问题。 具...
  • qq_24486635
  • qq_24486635
  • 2017年05月30日 15:01
  • 91

算法练习:Add Two Numbers

https://leetcode.com/problems/add-two-numbers/?tab=Description
  • zhangf21
  • zhangf21
  • 2017年02月24日 11:18
  • 150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 2 - Add Two Numbers
举报原因:
原因补充:

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