LeetCode2. 两数相加


题目

分析

模拟题目

先建立哑结点,采用头插法。

代码

 1 class Solution {
 2 public:
 3     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
 4         ListNode *head = new ListNode();
 5         ListNode *cur = head;
 6         int sum = 0;
 7         while(l1 || l2 || sum){
 8             if(l1){
 9                 sum += l1->val;
10                 l1 = l1->next;
11             }
12             if(l2){
13                 sum += l2->val;
14                 l2 = l2->next;
15             }
16             ListNode *node = new ListNode(sum % 10);
17             sum /= 10;
18             cur->next = node;
19             cur = cur->next;
20         }
21         return head->next;
22     }
23 };
 1 class Solution {
 2 public:
 3     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
 4         //建立哑节点,这样不需要对第一个元素特判
 5         auto dummy = new ListNode();
 6         auto cur = dummy;
 7         
 8         int c = 0; //进位 
 9         while(l1 || l2 || c){
10             if(l1) {c += l1->val;l1 = l1->next;}
11             if(l2) {c += l2->val;l2 = l2->next;}
12             
13             // auto p = new ListNode(c%10);
14             // cur ->next = p;cur = cur->next;
15            
16             //上面两行精简为
17             cur =cur->next = new ListNode(c % 10);
18 
19             c /= 10;
20         }
21 
22         return dummy->next;
23     }