题解
考察数据结构链表指针
首先确定题目给出的逆序,即第一个数是个位,即从左向右相加即可,该进位进位。遇到空补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){
ListNode* pre = new ListNode(0);//一开始指向为空
ListNode* cur = pre;//设定pre的头指针为cur
int carry = 0;//进位值
while(l1 != nullptr || l2 != nullptr){
int x = l1 == nullptr ? 0 : l1->val;//如果为空那么补0
int y = l2 == nullptr ? 0 : l2->val;
int sum = x + y + carry;
carry = sum/10;
sum = sum%10;
cur->next = new ListNode(sum);
cur = cur->next;
if(l1 != nullptr){
l1 = l1->next;
}
if(l2 != nullptr){
l2 = l2->next;
}
}
if(carry == 1){//看最后一位是否有进位
cur->next = new ListNode(carry);
}
//cout<<pre->next;
return pre->next;
}
};