/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ #include <iostream> using namespace std; class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { if ((l1 == NULL) && (l2 == NULL)) { cout << "Invalid input!"; return NULL; } ListNode* fir = l1; ListNode* sec = l2; ListNode* p = new ListNode(0); ListNode* thr = p;//为了不干预原指针,我分别设了fir,sec,thr三个临时指针 while (fir != NULL || sec != NULL) { int a = 0, b = 0;//分别检查fir,sec if (fir != NULL) { a = fir->val; fir = fir->next; } if (sec != NULL) { b = sec->val; sec = sec->next; } ListNode* cur = new ListNode(0);//设了个新节点 cur->val = (thr->val + a + b) / 10; thr->val = (thr->val + a + b) % 10; if (fir == NULL && sec == NULL && cur->val == 0)//如果接下来没有数要加了,那就是最顶位为0,为了不让显示,我就直接跳出了,这个事当时恶心到我了 break; thr->next = cur; thr = cur; } return p; } };
分析:
考察链表和编程能力
这个时间复杂度为O(max(m,n)),空间复杂度也是O(max(m,n))
总结:
编程还是不够熟练,循环里两个if没有第一时间想到,还有为了让顶位为0不显示,我居然写了好几遍,尴尬。