A natural stack based solution. Seriously, whey ‘Medium‘?
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack<ListNode*> s1, s2; ListNode *p = l1; while(l1) { s1.push(l1); l1 = l1->next; } p = l2; while(l2) { s2.push(l2); l2 = l2->next; } // ListNode *pc = nullptr, *pp = nullptr; int carry = 0; while(!s1.empty() || !s2.empty()) { int a1 = 0; if(!s1.empty()) { a1 = s1.top()->val; s1.pop(); } int a2 = 0; if(!s2.empty()) { a2 = s2.top()->val; s2.pop(); } int sum = (a1 + a2 + carry) % 10; carry = (a1 + a2 + carry) / 10; pp = new ListNode(sum); pp -> next = pc; pc = pp; } if(carry) { pp = new ListNode(carry); pp -> next = pc; } return pp; } };
时间: 2024-10-09 20:21:35