题目思路:
①创建一个int类型的局部变量,用来存储两个结点的Val值。
②判断该Val值与10求余(mod)后是否大于0,如果大于0, 则需要在下一个结点进位。
③最关键的步骤:实现l1,l2结点数值相加后构建新的存储求和后的结点.此时先创建一个head头部结点以及一个尾部结点(tail)指向头部结点,然后,让tail指向当前的tail的next用来插入下一个。这个有点不好想。
最后,循环判断两个链表是否为空,最后返回head.
题解算法 C++
/**
* 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* head =nullptr;
ListNode* tail =nullptr;
int carry = 0;
while ((l1!=nullptr) || (l2!=nullptr))
{
int n1 = l1?l1->val:0;
int n2 = l2?l2->val:0;
int sum = n1+n2+carry;
if(!head)//head为空
{
head = tail = new ListNode(sum%10);
}
else
{
tail->next = new ListNode(sum%10);
tail = tail->next;
}
carry = sum/10;
if(l1)//l1非空
{
l1 = l1->next;
}
if(l2)
{
l2 = l2->next;
}
if(carry>0)
{
tail->next = new ListNode(carry);
}
}
return head;
}
};