给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
可以假设除了数字 0 之外,这两个数字都不会以零开头。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//判断是不是不是空的
if(head==nullptr) return nullptr;
ListNode* cur=head;
ListNode* pre=nullptr;
ListNode* aft=nullptr;
while(cur)
{
aft=cur->next;
cur->next=pre;
pre=cur;
cur=aft;
}
return pre;
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//反转两个链表
ListNode* tail_1=reverseList(l1);
ListNode* tail_2=reverseList(l2);
ListNode* result=new ListNode(0);
ListNode* temp=result;
int head=0;
//如果两个链表中有一个不是空的
while(tail_1!=nullptr || tail_2!=nullptr )
{
int t=0;
//判断是不是这个节点对应的值是空的
if(tail_1==nullptr)
{
t=tail_2->val;
}
else if(tail_2==nullptr)
{
t=tail_1->val;
}
else
{
t=tail_1->val+tail_2->val;
}
if(t==9)
{
t=t+head;
temp->next=new ListNode(t%10);
}
//下一个节点在没有申请空间的时候是不存在的
//在使用之前需首先要将空间申请出来
else temp->next=new ListNode(t%10+head);
temp=temp->next;
head=t/10;
if(tail_1) tail_1=tail_1->next;
if(tail_2) tail_2=tail_2->next;
}
if(head !=0)
{
temp->next=new ListNode(head);
temp=temp->next;
}
return reverseList(result->next);
}
};