反向链表
/**
* 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) {
ListNode* dummyHead = new ListNode(0);
int sum = 0;
ListNode* tmp = dummyHead;
while (l1 || l2 || sum != 0) {
if (l1) {
sum += l1->val;
l1 = l1->next;
}
if (l2) {
sum += l2->val;
l2 = l2->next;
}
tmp->next = new ListNode(sum % 10);
tmp = tmp->next;
sum /= 10;
}
return dummyHead->next;
}
};
正向链表——————利用栈来反向求和
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
stack<int> num1;
stack<int> num2;
while (head1) {
num1.push(head1->val);
head1 = head1->next;
}
while (head2) {
num2.push(head2->val);
head2 = head2->next;
}
ListNode* ans = nullptr;
int carry = 0;
while (!num1.empty() || !num2.empty() || carry != 0) {
int a = 0;
if (!num1.empty()) {
a = num1.top();
num1.pop();
}
int b = 0;
if (!num2.empty()) {
b = num2.top();
num2.pop();
}
carry = a + b + carry;
ListNode* cur = new ListNode(carry % 10);
cur->next = ans;
ans = cur;
carry /= 10;
}
return ans;
}
};