#include<iostream> #include<stdio.h> #include<vector> #include <algorithm> #include <functional> #include<string> #include<fstream> #include <sstream> using namespace std; // 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) { ListNode *nextL1 = l1->next;////指向下一个结点的指针 ListNode *nextL2 = l2->next;//指向下一个结点的指针 ListNode *result = new ListNode(0);//创建新元素 ListNode *trueResult = result;//最后的结果result指向trueResult,这样可以获取result所接收的全部元素,而result的指针由于每次都往下移,所以每次都更新 int sum = l1->val + l2->val;//初始化sum,未考虑进位 int jinWei = 0;//进位初始化未0 if (sum >= 10)//获得进位值 { jinWei = sum / 10; result->val = sum % 10;//获得result的值 } else { result->val = sum;////获得result的值 jinWei = 0; } while (nextL1 != NULL || nextL2 != NULL|| jinWei > 0) { int nextL1Val = 0; int nextL2Val = 0; if (nextL1 != NULL) { nextL1Val = nextL1->val; nextL1 = nextL1->next; } if (nextL2 != NULL){ nextL2Val = nextL2->val; nextL2 = nextL2->next; } sum = nextL1Val + nextL2Val + jinWei; if (sum >= 10) { jinWei = sum / 10; result->next = new ListNode(sum % 10); } else{ result->next = new ListNode(sum); jinWei = 0; } result = result->next; } return trueResult; } }; void trimLeftTrailingSpaces(string &input) { input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) { return !isspace(ch); })); } void trimRightTrailingSpaces(string &input) { input.erase(find_if(input.rbegin(), input.rend(), [](int ch) { return !isspace(ch); }).base(), input.end()); } vector<int> stringToIntegerVector(string input) { vector<int> output; trimLeftTrailingSpaces(input); trimRightTrailingSpaces(input); input = input.substr(1, input.length() - 2); stringstream ss; ss.str(input); string item; char delim = ','; while (getline(ss, item, delim)) { output.push_back(stoi(item)); } return output; } ListNode* stringToListNode(string input) { // Generate list from the input vector<int> list = stringToIntegerVector(input); // Now convert that list into linked list ListNode* dummyRoot = new ListNode(0); ListNode* ptr = dummyRoot; for (int item : list) { ptr->next = new ListNode(item); ptr = ptr->next; } ptr = dummyRoot->next; delete dummyRoot; return ptr; } string listNodeToString(ListNode* node) { if (node == nullptr) { return "[]"; } string result; while (node) { result += to_string(node->val) + ", "; node = node->next; } return "[" + result.substr(0, result.length() - 2) + "]"; } int main() { string line; while (getline(cin, line)) { ListNode* l1 = stringToListNode(line); getline(cin, line); ListNode* l2 = stringToListNode(line); ListNode* ret = Solution().addTwoNumbers(l1, l2); string out = listNodeToString(ret); cout << out << endl; } return 0; }