题目描述(Medium)
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
题目链接
https://leetcode.com/problems/add-two-numbers/description/
Example 1:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
算法分析
无
Tip:将空指针时数值设为的操作,大大简化了代码。
提交代码:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int val = 0, carry = 0;
ListNode *listHead = new ListNode(-1);
ListNode *currNode = listHead;
while (l1 || l2)
{
int val1 = l1 == nullptr ? 0 : l1->val;
int val2 = l2 == nullptr ? 0 : l2->val;
val = (val1 + val2 + carry) % 10;
carry = (val1 + val2 + carry) / 10;
currNode->next = new ListNode(val);
currNode = currNode->next;
l1 = l1 == nullptr ? nullptr : l1->next;
l2 = l2 == nullptr ? nullptr : l2->next;
}
if (carry != 0)
currNode->next = new ListNode(carry);
return listHead->next;
}
};
测试代码:
// ====================测试代码====================
void Test(const char* testName, ListNode* l1, ListNode* l2, ListNode* expected)
{
if (testName != nullptr)
printf("%s begins: \n", testName);
Solution s;
ListNode* result = s.addTwoNumbers(l1, l2);
while (result && expected)
{
if (result->val != expected->val)
{
printf("failed\n");
break;
}
result = result->next;
expected = expected->next;
}
if(result || expected)
printf("failed\n");
else
printf("passed\n");
}
int main(int argc, char* argv[])
{
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(4);
ListNode* node3 = new ListNode(3);
ConnectListNodes(node1, node2);
ConnectListNodes(node2, node3);
ListNode* node4 = new ListNode(5);
ListNode* node5 = new ListNode(6);
ListNode* node6 = new ListNode(4);
ConnectListNodes(node4, node5);
ConnectListNodes(node5, node6);
ListNode* node7 = new ListNode(7);
ListNode* node8 = new ListNode(0);
ListNode* node9 = new ListNode(8);
ConnectListNodes(node7, node8);
ConnectListNodes(node8, node9);
Test("Test1", node1, node4, node7);
return 0;
}