leetcode 2nd problem add two numbers

原创 2018年04月15日 22:09:53

1.读题
a.倒序的两个链表,均不为空。
b.数据格式除了0以外开头不能为0。

2.思路
和数据结构选择的大作业类似,大整数加减,不过逆序无需构造循环链表。

3.反思
解题步骤清楚,但是变量的放置位置很有讲究,本来想对个位数做统一处理,发现逻辑上就有问题,因为,涉及到:
a.个位数加个位数,可能不进位的情况。
b.统一的流程只能是有一者或者两者指针移动的循环控制流,两者唯一确定的是都有个位,头结点必须保留作为返回值。

4.注意点和异常处理
a.指针移动要统一。
b.位数不对齐,时刻要考虑,一个链表为空,一个不为空的情况。
c.最后对进位统一处理。

5.代码

/**
 * 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 *sum=new ListNode((l1->val+l2->val)%10);
    int carry = (l1->val+l2->val)/10;
    ListNode* cur = sum;
    ListNode* pn1 = l1->next;
    ListNode* pn2 = l2->next;
        while(pn1!=NULL||pn2!=NULL)
        {


            while(pn1!=NULL&&pn2!=NULL)
            {
                ListNode *point = new ListNode((pn1->val+pn2->val+carry)%10);
                carry = (pn1->val+pn2->val+carry)/10;
                cur->next = point;
                cur = cur->next;
                pn1 = pn1->next;
                pn2 = pn2->next;
            }
            if(pn1!=NULL)
            {
                ListNode *point = new ListNode((pn1->val+carry)%10);
                carry = (pn1->val+carry)/10;
                cur->next = point;
                cur = cur->next;
                pn1 = pn1->next;
            }
            if(pn2!=NULL)
            {
                ListNode *point = new ListNode((pn2->val+carry)%10);
                carry = (pn2->val+carry)/10;
                cur->next = point;
                cur = cur->next;
                pn2 = pn2->next;  
            }


        }

    if(carry!=0)
    {
        ListNode *point = new ListNode(1);
        cur->next = point;
        cur = cur->next;  
    }
    return sum;

    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duringsummer/article/details/79954149

leetcode 2. Add Two Numbers C语言实现

leetcode 2. Add Two Numbers Description You are given two non-empty linked lists represent...
  • banana1006034246
  • banana1006034246
  • 2017-03-31 19:48:34
  • 1248

[LeetCode][2]Add Two Numbers解析 -Java实现

Q: You are given two linked lists representing two non-negative numbers. The digits are stored in re...
  • u014629433
  • u014629433
  • 2016-06-01 16:34:44
  • 2181

【LeetCode】2. Add Two Numbers 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51820937Subject 出处:https://leetcode.com/pro...
  • crazy1235
  • crazy1235
  • 2016-10-24 19:46:34
  • 3753

LeetCode | Add Two Numbers

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in...
  • lanxu_yy
  • lanxu_yy
  • 2013-09-14 17:06:48
  • 15566

[LeetCode] 002. Add Two Numbers (Medium) (C++/Java/Python)

002.Add_Two_Numbers (Medium)
  • hcbbt
  • hcbbt
  • 2015-02-27 12:43:08
  • 5901

Leetcode中Add Two Numbers算法的理解

一、题目 You are given two non-empty linked lists representing two non-negative integers. The digits ar...
  • zhangguijuansc
  • zhangguijuansc
  • 2017-06-04 14:55:04
  • 1478

LeetCode02:Add Two Numbers Java实现

原题目: You are given two linked lists representing two non-negative numbers. The digits are stored ...
  • gg543012991
  • gg543012991
  • 2016-11-16 22:06:30
  • 382

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

一、题目描述 题目原文:  You are given two linked lists representing two non-negative numbers. ...
  • u014615155
  • u014615155
  • 2016-11-21 12:05:45
  • 2338

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

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

[LeetCode#2][C]Add Two Numbers

题目如下: 思路: 其实就是基本的链表操作,只要注意进位的判断就好。代码:/** * Definition for singly-linked list. * struct ListNode ...
  • FaaronZheng
  • FaaronZheng
  • 2016-05-01 19:30:16
  • 503
收藏助手
不良信息举报
您举报文章:leetcode 2nd problem add two numbers
举报原因:
原因补充:

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