LeetCode刷题-002两数相加

给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 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  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 
10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
11 {
12     struct ListNode* q=(struct ListNode*)malloc(sizeof(struct ListNode)),*p=q;
13     int carry=0;
14     while (l1 || l2 ||carry) 
15     {
16         int sum=(l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
17         p->val=sum%10;
18         carry=sum/10; 
19         l1 = l1 ? l1->next : l1;
20         l2 = l2 ? l2->next : l2;
21         if(!(l1 || l2 ||carry)) 
22         {
23             p->next=NULL;
24             return q;
25         }
26         p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
27         p=p->next;
28     }
29         return q;    
30 }

猜你喜欢

转载自www.cnblogs.com/nkqlhqc/p/9085310.html