原题链接:
意思是给定两个存在链表中的数,输出和(同样存储在链表中)。
我的实现:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */#includeclass Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack result_stack; ListNode* result_list = NULL; int val, carry; carry = 0; while(l1 != NULL || l2 != NULL || carry != 0) { int l1_num, l2_num, sum; if (l1 == NULL) { l1_num = 0; } else { l1_num = l1->val; l1 = l1->next; } if (l2 == NULL) { l2_num = 0; } else { l2_num = l2->val; l2 = l2->next; } sum = l1_num + l2_num + carry; val = sum % 10; carry = sum / 10; result_stack.push(val); } while(!result_stack.empty()) { ListNode* result_node = new ListNode(result_stack.top()); result_node->next = result_list; result_list = result_node; result_stack.pop(); } return result_list; }};
主要是注意进位,结果的保存。不要像我一样这么麻烦地保存结果的,直接在运算时构建结果链表即可。