给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807
思路:
1)先分别统计两个链表的长度为len1, len2;
- 让两个链表长度一样,便于做加法。具体操作是让短的链表添加结点,添加的结点值为0;
3)创建一个新链表,用于存储两个链表之和。
注意:中间的进位问题
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p1 = l1;
ListNode *p2 = l2;
int len1=1, len2=1;
while(p1->next)
{
len1++;
p1 = p1->next;
}
while(p2->next)
{
len2++;
p2 = p2->next;
}
if(len1 > len2)
{
for(int i=1; i<=len1-len2; i++)
{
p2->next = new ListNode(0);
p2 = p2->next;
}
}
else
{
for(int i=1; i<=len2-len1; i++)
{
p1->next = new ListNode(0);
p1 = p1->next;
}
}
p1 = l1;
p2 = l2;
ListNode *l3 = new ListNode(-1); //存放结果的链表
ListNode *p3 = l3; //移动l3指针
int i=0; //记录相加的结果
bool count = false;
while(p1 && p2)
{
i = count + p1->val + p2->val;
p3->next = new ListNode(i%10);
count = i >= 10? true:false; //这句话是先判断i是否大于等于10,若条件成立,则i=1,否则i=0;
p3 = p3->next;
p1 = p1->next;
p2 = p2->next;
}
if(count)
{
p3->next = new ListNode(1);
p3 = p3->next;
}
return l3->next;
}
网友评论