收获
这道题并不是很难,涉及到的是整数的加法原则(有点像大整数字符串相加的问题),还涉及到链表的基础知识,比如单向性。
然而我这道题交了很多次, 主要原因是没考虑清楚各种情况下(长度上 l1>l2,l1=l2 ,l1 <l2,是否向前进了一位),还有各种情况下的判断条件、所对应的操作是否有所变化,这些是非常重要的
代码
我这里为了节省空间,直接利用了l1 的空间,如果l1不够长,那就一直给它补0
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry = 0;
ListNode* node = l1;
while(1){
int num = l1->val + (l2 == nullptr? 0 : l2->val) + carry;
l1 -> val = num %10;
carry = num / 10;
if(l1->next == nullptr){
if(carry == 0 &&(l2 == nullptr || l2->next == nullptr)) return node;//l1长于等于l2
l1-> next = new ListNode(0);// l2长于l1
}
l1 = l1->next;
if(l2 != nullptr)l2 = l2->next;
}
return node;
}
};