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 }