首页 > 其他 > 详细

[Leetcode 2, Medium] Add Two Numbers

时间:2015-08-13 07:43:12      阅读:89      评论:0      收藏:0      [点我收藏+]

Problem:

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

Analysis:

The first part of this problem is to use two pointers to trasversal all nodes of two lists. Set one to be the head of the first linked-list, and the second one to be the head of the second linked-list. Move them in the same pace until the next pointer of one of the nodes to be NULL. If the next pointer of the node of the linked-list is not NULL, truncate the reminder part of the linked-list and attach it to the first list. 

The second part ot the solution is the simulation of addition. Use an int variable to take the carry of the sum of the current two nodes. After the first loop, we should continue the computation until the carry to be 0 or a new node is added to the list with value 1.

Code:

C++ (36 ms):

 1     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
 2         if(l1 == NULL)
 3             return l2;
 4             
 5         if(l2 == NULL)
 6             return l1;
 7             
 8         ListNode *p_cur_1 = l1;
 9         ListNode *p_cur_2 = l2;
10         int carry = 0;
11         for(;; p_cur_1 = p_cur_1->next, p_cur_2 = p_cur_2->next) 
12         {
13             p_cur_1->val += p_cur_2->val + carry;
14             if(p_cur_1->val >= 10) {
15                 p_cur_1->val %= 10;
16                 carry = 1;
17             } else
18                 carry = 0;
19                 
20             if(p_cur_1->next == NULL || p_cur_2->next == NULL)
21                 break;
22         }
23         
24         if(p_cur_1->next == NULL && p_cur_2->next != NULL) {
25             p_cur_1->next = p_cur_2->next;
26             p_cur_2->next = NULL;
27         }
28         
29         while(carry) {
30             if(p_cur_1->next == NULL)
31                 p_cur_1->next = new ListNode(0);
32 
33             p_cur_1->next->val += carry;
34             if(p_cur_1->next->val >= 10) {
35                 p_cur_1->next->val %= 10;
36                 carry = 1;
37             } else
38                 carry = 0;
39                 
40             p_cur_1 = p_cur_1->next;
41         }
42         
43         return l1;
44     }

 

[Leetcode 2, Medium] Add Two Numbers

原文:http://www.cnblogs.com/fanwu/p/4726060.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!