这个题目没有什么特点,但我好像写的不是很好,仍有一些空间时间上的浪费。不过在这里记下来一些我和OJ的交互。
写这个题目时,我是写完直接提交的,因为觉得测试数据还好复杂。后来就遇到了各种错误,先是报的逻辑上的错误,改了。后来报的是memory limited,后来想是不是因为三个链表不好。那就把一个链表加到另一个链表中不新建了。然后没写,后来又想我直接释放掉用过的节点是不是更少内存呢。试验后依然有memory limited,认真看了看是一个循环没有退出去。再后来又遇到runtime error这个错误我见得多了,肯定是指针错误了,认真查了一遍改了改,最后算是过了。
代码:
#include<iostream> using namespace std; struct ListNode { int val; ListNode *next; }; ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { ListNode *l3 = (ListNode*)malloc(sizeof(ListNode)); ListNode *r = l3; ListNode *p = l1; ListNode *q = l2; int c = 0; while (p != NULL || q != NULL||c!=0) { r->next = (ListNode*)malloc(sizeof(ListNode)); r = r->next; if (p == NULL&q == NULL) { r->val = c; r->next = NULL; c = 0; } else { if (p != NULL&&q == NULL) { int t = p->val + c; r->val = t % 10; c = t / 10; r->next = NULL; ListNode* z = p; p = p->next; delete(z); } else if (q != NULL&&p == NULL) { int t = q->val + c; r->val = t % 10; c = t / 10; r->next = NULL; ListNode * z = q; q = q->next; delete(z); } else { int t = p->val + q->val + c; c = t / 10; r->val = t % 10; r->next = NULL; ListNode * z1 = p; p = p->next; ListNode *z2 = q; q = q->next; delete(z1); delete(z2); } } } return l3->next; } int main() { ListNode * l1 = (ListNode*)malloc(sizeof(ListNode)); ListNode *l2 = (ListNode*)malloc(sizeof(ListNode)); l1->val = 9; /*l1->next = NULL;*/ ListNode * p = l1->next = (ListNode*)malloc(sizeof(ListNode)); p->val = 9; p->next = NULL; l2->val = 9; l2->next = NULL; ListNode *l3 = addTwoNumbers(l1, l2); ListNode *r; for (r = l3; r != NULL; r = r->next) cout << r->val << " " << endl; }