LeetCode445 两数相加2

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

 

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

 

逆序处理首先应该想到栈,而不是递归,因为栈更方便,消耗空间也更少。

 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 class Solution {
10 public:
11     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12         stack<ListNode*>s1,s2;
13         while(l1!=nullptr){
14             s1.push(l1);
15             l1=l1->next;
16         }
17         while(l2!=nullptr){
18             s2.push(l2);
19             l2=l2->next;
20         }
21         int carry=0;
22         ListNode* nextptr=nullptr;
23         while(!s1.empty() || !s2.empty()){
24             int n1=s1.empty()?0:s1.top()->val;
25             int n2=s2.empty()?0:s2.top()->val;
26             if(!s1.empty()) s1.pop();
27             if(!s2.empty()) s2.pop();
28             int sum=carry+n1+n2;
29             if(sum>9) carry=1;
30             else carry=0;
31             sum%=10;
32             ListNode* temp=new ListNode(sum);
33             temp->next=nextptr;
34             nextptr=temp;
35         }
36         if(carry){
37             ListNode* newhaed=new ListNode(1);
38             newhaed->next=nextptr;
39             return newhaed;
40         }
41         return nextptr;
42 
43     }
44 };

 

posted @ 2020-07-25 12:49  __rookie  阅读(110)  评论(0编辑  收藏  举报