题目要求
做题链接:2.两数之和
思路解析
本题要求我们计算两个链表中存储的元素之和,并且明确的告诉了我们不包含前置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 next=0;
ListNode* head=nullptr;
ListNode* tail=nullptr;
//两个有一个不为空就继续
while(l1||l2)
{
//处理进位和当前值
int total=(l1==nullptr?0:l1->val)+(l2==nullptr?0:l2->val)+next;
next=total/10;
total%=10;
//按序插入
ListNode* newnode=new ListNode(total);
if(head==nullptr)
head=tail=newnode;
else
{
tail->next=newnode;
tail=tail->next;
}
//判空
if(l1)
l1=l1->next;
if(l2)
l2=l2->next;
}
//处理最后的进位问题
if(next) tail->next=new ListNode(1);
return head;
}
};