这道题做出来很简单,但是运行时间总是不能小于40ms。
看了下discuss,最快的方法就是不用栈,两个指针从后往前走。
我是用栈的,但是比别的用栈的慢了不少,最后发现原因是用了太多的临时变量,以后变量还是少用的好。
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<int> nodeStack1;
stack<int> nodeStack2;
while(l1) {
nodeStack1.push(l1->val);
l1 = l1->next;
}
while(l2) {
nodeStack2.push(l2->val);
l2 = l2->next;
}
ListNode *head = NULL;
int sum = 0;
while(!nodeStack1.empty() || !nodeStack2.empty()) {
sum /= 10;
if (!nodeStack1.empty()) {
sum += nodeStack1.top();
nodeStack1.pop();
}
if (!nodeStack2.empty()) {
sum += nodeStack2.top();
nodeStack2.pop();
}
ListNode *node = new ListNode(sum%10);
node->next = head;
head = node;
}
if (sum >= 10) {
ListNode *node = new ListNode(1);
node->next = head;
head = node;
}
return head;
}