题目:
我的代码:
/**
* 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) {
if (l2 == NULL && l1 == NULL) return NULL;
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
int a[1001], b[1001], c[1001];
int x, y;
for ( x = 0; l1 != NULL; x++, l1 = l1->next) a[x] = l1->val;
for ( y = 0; l2 != NULL; y++, l2 = l2->next) b[y] = l2->val;
int i, j, k = 0;
int tmp = 0;
for (i = 0, j = 0; i < x && j < y; j++, i++, k++) {
if (a[i]+b[j]+tmp >= 10) {
c[k] = (a[i]+b[j]+tmp)%10;
tmp = 1;
} else {
c[k] = a[i]+b[j]+tmp;
tmp = 0;
}
}
while (i < x) {
c[k] = (a[i]+tmp)%10;//考虑9+1的情况
if (a[i]+tmp >= 10) tmp = 1;
else tmp = 0;
k++;
i++;
}
while (j < y) {
c[k] = (b[j]+tmp)%10;
if (b[j]+tmp >= 10) tmp = 1;
else tmp = 0;
k++;
j++;
}
if (tmp == 1) c[k++] = 1;
ListNode* res = new ListNode(c[k-1]);
for (int m = k-2; m >= 0; m--) {
ListNode* p = new ListNode(c[m]);
p->next = res;
res = p;
}
return res;
}
};
本题主要问题在于进位的处理。我的思路是先将两个链表存放到两个数组中,然后把相加的结果放到另一个数组,再新建一个链表进行赋值。一开始由于对链表的构建不太熟悉导致很多错误,后来才发现是忘记new新空间。做这道题的时候我也wa了很多次,一开始是取模的时候忘记吧进位算进去导致9+1的情况被忽略,然后是因为自己在做题的时候思路不够清晰,导致链表跟数组的转换过程比较混乱,一开始以为链表得从后面先加才建了数组,后来发现好像可以不需要数组。。