LeetCode---2. 两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     struct ListNode *next;
 6  * };
 7  */
 8 
 9 
10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
11     struct ListNode* p1 = l1;
12     struct ListNode* p2 = l2;
13     struct ListNode* p3 = NULL;
14     struct ListNode* sum = NULL;
15     struct ListNode* tempSum = NULL;
16 
17     unsigned short flag = 0;
18 
19     sum = (struct ListNode*)malloc(sizeof(struct ListNode));
20     sum->val = 0;
21     sum->next = NULL;
22     tempSum = sum;
23 
24     if ((p1 == NULL) && (p2 == NULL))
25     {
26         return sum;
27     }
28 
29     while ((p1 != NULL) || (p2 != NULL))
30     {
31         if (p1 != NULL)
32         {
33             tempSum->val += p1->val;
34             if (p1->next == NULL)
35             {
36                 p1 = NULL;
37             }
38             else
39             {
40                 p1 = p1->next;
41             }
42         }
43         if (p2 != NULL)
44         {
45             tempSum->val += p2->val;
46             if (p2->next == NULL)
47             {
48                 p2 = NULL;
49             }
50             else
51             {
52                 p2 = p2->next;
53             }
54         }
55 
56         flag = tempSum->val / 10;
57         tempSum->val = tempSum->val % 10;
58         
59         if(((p1 != NULL) || (p2 != NULL)) || (flag != 0))
60         {
61             p3 = (struct ListNode*)malloc(sizeof(struct ListNode));
62             p3->val = flag;
63             p3->next = NULL;
64             tempSum->next = p3;
65             tempSum = p3;
66         }
67     }
68 
69     return sum;
70 }

 

posted @ 2020-02-04 19:06  hhboboy  阅读(173)  评论(0编辑  收藏  举报