给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
解题思路:
新建三个数组,将链表1的节点值存入数组1中,链表2的节点值存入数组2中,数组1和数组2中的元素求和倒序放入数组3中,将数组3中的元素赋给链表,返回链表即可
代码:
/**
* 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) {
int sum = 0, sum1 = 0,sum2 = 0;
vector<int> ans1;
vector<int> ans2;
vector<int> ans;
ListNode* p1,*p2,*p,*s;
s = new ListNode();
p1 = l1;
p2 = l2;
while(p1){
ans1.push_back(p1 -> val);
p1 = p1 -> next;
}
while(p2){
ans2.push_back(p2 -> val);
p2 = p2 -> next;
}
/*for(int i = 0; i < ans1.size() / 2; i++){
int t = ans1[i];
ans1[i] = ans1[ans1.size() - i - 1];
ans1[ans1.size() - i - 1] = t;
}
for(int i = 0; i < ans2.size() / 2; i++){
int t = ans2[i];
ans2[i] = ans2[ans2.size() - i - 1];
ans2[ans2.size() - i - 1] = t;
}*/
for(int i = 0,y = 0; i < ans1.size(); i++,y++){
sum1 += pow(10,y)*ans1[i];
}
for(int i = 0,y = 0; i < ans2.size(); i++,y++){
sum2 += pow(10,y)*ans2[i];
}
sum = sum1 + sum2;
if(sum == 0) ans.push_back(0);
while(sum){
ans.push_back(sum % 10);
sum /= 10;
}
/* for(int i = 0; i < ans.size() / 2; i++){
int t = ans[i];
ans[i] = ans[ans.size() - i - 1];
ans[ans.size() - i - 1] = t;
}*/
p = new ListNode();
s = p;
for(int i = 0;i < ans.size(); i++){
p ->next = new ListNode(ans[i]);
p = p -> next;
}
return s -> next ;
// return p;
}
};