
这道题我自己做的问题在于,一开始的判断条件是while(l1 != NULL && l2 != NULL),这样不好处理。改成while(l1 != NULL || l2 != NULL) ,l1,l2分开相加会好处理。
设置虚拟头节点会很容易。
/**
* 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) {
ListNode* preHead = new ListNode(0); //虚拟头节点
ListNode* cur = preHead;
int sum = 0;
int c = 0; //进位
while(l1 || l2 || c > 0){ //l1,l2分别判断
sum = 0;
if(l1){
sum += l1 -> val;
l1 = l1 -> next;
}
if(l2){
sum += l2 -> val;
l2 = l2 -> next;
}
sum += c;
c = sum / 10;
cur -> next = new ListNode(sum % 10);
cur = cur -> next;
}
return preHead -> next;
}
};