【说明】:这题麻烦在于leetcode上的输入方式,使得这题无法在本机调试,容易犯错误;其他的没什么;
Total Accepted: 133639
Total Submissions: 587845
Difficulty: Medium
You are given two linked lists representing two non-negative numbers. 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Subscribe to see which companies asked this question
#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//struct ListNode {
// int val;
// ListNode *next;
// ListNode(int x) : val(x), next(NULL) {}
//
//};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int valueTemp = 0;
int increFlag = 0;
ListNode* lHead;
ListNode* lTemp;
ListNode* lTempBefore;
int oneTimeFlag = 0;
ListNode* l1Next=l1;
ListNode* l2Next=l2;
do
{
if (l1Next != NULL && l2Next != NULL)
{
valueTemp = l1Next->val + l2Next->val + increFlag;
l1Next = l1Next->next;
l2Next = l2Next->next;
}
else if (l2Next != NULL)
{
valueTemp = l2Next->val + increFlag;
l2Next = l2Next->next;
}
else if (l1Next != NULL)
{
valueTemp = l1Next->val + increFlag;
l1Next = l1Next->next;
}
if (valueTemp >= 10)
{
valueTemp -= 10;
increFlag = 1;
}
else
{
increFlag = 0;
}
if (oneTimeFlag == 0)
{
oneTimeFlag = 1;
lHead = new ListNode(valueTemp);
lTemp = lHead;
}
else
{
lTempBefore = lTemp;
lTemp = new ListNode(valueTemp);
lTempBefore->next = lTemp;
}
} while ((l1Next != NULL) || (l2Next != NULL));
if (increFlag == 1)
{
lTempBefore = lTemp;
lTemp = new ListNode(increFlag);
lTempBefore->next = lTemp;
}
return lHead;
}
};