题目分析
1. 给出两个队列,做高精度加法,不存在前导零。
2. 这道题本身没有什么难度,不过在看过Top Solution之后学到用一个前导的指针作为开头代码能够写得更好看一些。
3. 以后也要多看Top Solution,学习一些比较好的写法。
题目代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* resultTail = NULL;
ListNode* resultHead = NULL;
int carry = 0;
while (p1 != NULL || p2 != NULL) {
ListNode * temp = new ListNode(((p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry) % 10);
carry = ((p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry) / 10;
if (resultHead == NULL) resultHead = temp;
if (resultTail != NULL)
resultTail->next = temp;
resultTail = temp;
p1 = (p1 == NULL ? NULL : p1->next);
p2 = (p2 == NULL ? NULL : p2->next);
}
if (carry != 0) resultTail->next = new ListNode(carry);
return resultHead;
}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* resultHead = new ListNode(0);
ListNode* resultTail = resultHead;
int carry = 0;
while (p1 != NULL || p2 != NULL) {
ListNode * temp = new ListNode(((p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry) % 10);
carry = ((p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry) / 10;
resultTail->next = temp;
resultTail = temp;
p1 = p1 == NULL ? NULL : p1->next;
p2 = p2 == NULL ? NULL : p2->next;
}
if (carry != 0) resultTail->next = new ListNode(carry);
return resultHead->next;
}
};