LeetCode 2 : Add Two Numbers

匿名 (未验证) 提交于 2019-12-02 22:56:40

题目:

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.

Example:

Input : ( 2 -> 4 -> 3 ) + ( 5 -> 6 -> 4 )

Output:7-> 0 -> 8

Explanation:342 + 465 = 807

思路:

example 1:

2->4->3

5->6->4

(2+5+0)->(4+6+0)->(3+4+1)    第三个数代表进位

7->0->8

example 2:

1

9->9

(1+9+0)->(0+9+1)->(0+0+1)

0->0->1

代码:

/**  * 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 *res = l1;  // the res is result         ListNode *cur = l1;  // record the last ListNode of the first singly-linked list         int carry = 0;         while( l1 != nullptr && l2 != nullptr ){  // if l1 and l2 are not nullptr,then add them up             int bitSum = l1->val + l2->val + carry;             carry = bitSum / 10;             bitSum = bitSum % 10;             l1->val = bitSum;             cur = l1;             l1 = l1->next;             l2 = l2->next;         }         if( l2 != nullptr ){  // if l2 is not empty , link l1 and l2             cur->next = l2;             l1 = cur->next;         }         while( l1 != nullptr ){               int bitSum = l1->val + carry;             carry = bitSum / 10;             bitSum = bitSum % 10;             l1->val = bitSum;             cur = l1;             l1 = l1->next;         }         if( carry != 0 ){             ListNode *t = new ListNode( carry );             cur->next = t;         }         return res;     } };

 

转载请标明出处:LeetCode 2 : Add Two Numbers
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!