LeetCode #2 Add Two Numbers

Posted 大峰子的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode #2 Add Two Numbers相关的知识,希望对你有一定的参考价值。

Description


 

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

  You may assume the two numbers do not contain any leading zero, except the number 0 itself.

 

题意


 

  给定两个表示非负整数的非空链表,数字以相反的顺序存储,每一个结点包含了一个数字。将这两个非负整数相加并以链表的形式返回。你可以假设这两个数字除了0之外,没有前导0(意思是如 0123、0345 是不被允许的格式)

 

Example


 

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

 

思路


 

  这是一个用链表处理大数相加的问题,我首先联想到的就是之前做过的多项式相加,本题不过是 low 版本的多项式相加问题。处理的思路很类似,先将第一个链表和第一个链表的相同位数的数字相加,将相加的值存储到第三个链表上。当其中一个链表已经遍历完而另一个链表还有未遍历完的时候,就将未遍历完的数字存储到第三个链表上即可。最后将第三个链表遍历一遍,处理数字满十进一位的情况。我这个方法可能有些暴力,如果你有更好的方法,欢迎指点。

 

//Runtime: 45 ms
/**
 * 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 *p1, *p2, *p3, *t3, *l3Head;
        p1 = l1;
        p2 = l2;
        l3Head = NULL;
        while((p1!=NULL) && (p2!=NULL)) {
            p3 = new ListNode(p1->val + p2->val);
            p1 = p1->next;
            p2 = p2->next;
            if(l3Head == NULL) {
                t3 = l3Head = p3;
            }
            else{
                t3->next = p3;
                t3 = p3;
            }
        }
        while(p1 != NULL) {
            p3 = new ListNode(p1->val);
            t3->next = p3;
            t3 = p3;
            p1 = p1->next;
        }
        while(p2 != NULL) {
            p3 = new ListNode(p2->val);
            t3->next = p3;
            t3 = p3;
            p2 = p2->next;
        }
        
        p3 = l3Head;         
        while(p3 != NULL) {
            if(p3->val >= 10) {
                p3->val = p3->val % 10;
                if(p3->next == NULL) {
                    p3->next = new ListNode(1);
                }
                else {
                   p3->next->val = p3->next->val + 1;
                }
            }
            p3 = p3->next;
        }
        
        return l3Head;
    }
};

 

  

以上是关于LeetCode #2 Add Two Numbers的主要内容,如果未能解决你的问题,请参考以下文章

2. 两个数相加 [leetcode 2: Add Two Numbers]

2. 两个数相加 [leetcode 2: Add Two Numbers]

LeetCode - 2 - Add Two Numbers

[leetcode][2] Add Two Numbers

[LeetCode]2. Add Two Numbers

LeetCode - 2. Add Two Numbers