LeetCode Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
if(l1==NULL && l2==NULL)
return NULL;
ListNode* root = l1, *pre=l1;
//add表示进位
int add = 0;
while (l1 && l2)
{
//sum临时存储和:两链表节点的和+进位
int sum = l1->val + l2->val + add;
add = sum/10;
l1->val = sum%10;
//pre保存当前遍历节点的前一节点,方便后面新增节点插入
pre = l1==NULL?l2:l1;
l1 = l1->next;
l2 = l2->next;
}
//链表长度一致,都走到末尾
if(l1==NULL && l2==NULL)
{
while (add > 0)
{//虽然链表都到末尾,但是可能还有进位,此时需要新增节点来加入进位
ListNode* tmp = new ListNode(add);
tmp->next = NULL;
pre->next = tmp;
pre = pre->next;
add/=10;
}
}
else
{
//将p指向未到末尾的链表
ListNode* p = l1==NULL?l2:l1;
//有进位或者还有链表没有遍历到末尾
while(add>0 || p)
{
int sum = 0;
if(p != NULL)
sum = p->val + add;
else
sum = add;
add = sum/10;
ListNode* tmp = new ListNode(sum%10);
tmp->next = NULL;
pre->next = tmp;
pre = pre->next;
if(p != NULL)
p = p->next;
//没有进位了,没有必要再新增节点,直接break,然后把p接入即可
if(add == 0)
break;
}
if(add == 0)
pre->next = p;
}
return root;
}
1万+



被折叠的 条评论
为什么被折叠?



