/**
* Definition for singly-linked list.
* struct ListNode {
* int val;//当前节点的值
* ListNode *next; //指向下一个节点的值
* ListNode(int x) : val(x), next(NULL) {}//初始化当前节点值为x,指针为空
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int len1=1;//记录l1的长度
int len2=1;//记录l2的长度
ListNode* p=l1;//*p指向l1,这样可以获取l1所接收的全部元素,而l1的指针由于每次都往下移,所以每次都更新
ListNode* q=l2;
while(p->next!=NULL)//通过while循环->获取l1的长度
{
len1++;
p=p->next;
}
while(q->next!=NULL)//通过while->获取l2的长度
{
len2++;
q=q->next;
}
//为了使他们长度一样
if(len1>len2)//如果l1比l2长->在l2末尾补零
{
for(int i=1;i<=len1-len2;i++)
{
q->next=new ListNode(0);
q=q->next;
}
}
else//如果l2比l1长->在l1末尾补零
{
for(int i=1;i<=len2-len1;i++)
{
p->next=new ListNode(0);
p=p->next;
}
}
p=l1;
q=l2;
bool count=false;//记录进位
ListNode* l3=new ListNode(-1);//存放结果的链表
ListNode* w=l3;//l3的移动指针
int a=0;//记录相加结果
while(p!=NULL&&q!=NULL)
{
a= count + p->val + q->val;
w->next = new ListNode(a%10);//将得到的结果插入到l3中
count = i>=10?true:false;//更新count
w=w->next;
p=p->next;
q=q->next;
}
if(count)//若最后还有进位
{
w->next=new ListNode(1);
w=w->next;
}
return l3->next;
}
};