注意个位,sum - 10。 注意进位 1,注意头插法,由于头插法是反的,所以push的时候用队列。
/**
* 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> left_stack;
stack<int> right_stack;
queue<int> result;
while(head1){
left_stack.push(head1->val);
head1 = head1->next;
}
while(head2){
right_stack.push(head2->val);
head2 = head2->next;
}
int max_length = 0;
if(left_stack.size()>=right_stack.size()){
max_length = left_stack.size();
}else{
max_length = right_stack.size();
}
ListNode* res = new ListNode(0);
int add_on = 0;
while(max_length){
int up = 0;
int down = 0;
if(!left_stack.size()){
up = 0;
}else{
up = left_stack.top();
left_stack.pop();
}
if(!right_stack.size()){
down = 0;
}else{
down = right_stack.top();
right_stack.pop();
}
int sum = up+down + add_on;
add_on = 0;
if(sum>=10){
result.push(sum-10) ;
add_on = 1;
if(max_length==1){
if(sum==10){
result.push(1);
}
}
}else{
result.push(sum);
}
max_length--;
}
//result.push(add_on);
while(!result.empty()){
ListNode* node = new ListNode(result.front());
result.pop();
node->next = res->next;
res->next = node;
}
return res->next;
}
};
京公网安备 11010502036488号