Add to numbers

题目:
You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

Subscribe to see which companies asked this question.

代码:
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 解析:首先我们先判断我们建立的两个链表是否为空的链表,如果l1为空的,那么返回l2;同理,l2为空时返回l1
if(l1 == NULL or l2 == NULL)
if(l1 == NULL)
return l2;
else
return l1;
int b = 0; 解析: 建立b为进位的变量在下面方便使用。
ListNode *a1 = l1, *a2 = l2, *p1 = NULL;
while(a1 != NULL) 解析:我们是while(a1 != NULL),所以要始终保持a1不为空,如果a1为空则跳出。
{ val1和val2是l1和l2里面的一个个的值,他们的下标相同,所以要相加。
int val1 = a1->val; //val1为a1中的值
int val2;
if(a2 == NULL){ //如果a2 为空的话,a2 = 0;否则val2表示a2中的值。
val2 = 0;
}
else{
val2 = a2->val;
}
if(val1 + val2 + b > 9) 解析:如果val1和val2在加上进位变量的和大于9,表示需要进位,这时,变量b由0变为1;带入下一个val1和val2
{ 的计算之中,而且计算出来的结果只要求其个位即可,所以用%10来表示。
a1->val = (val1 + val2 + b) % 10;
b = 1;
}
else
{
a1->val = val1 + val2 + carry; 解析:当然,如果不大于9,则进位还为0.
b = 0;
}
if(a1->next == NULL && a2)
{
a1->next = a2->next; 解析:如果a1的下一个节点为空的话,那么将a2的下一个节点赋值给a1的下一个节点,a2的下一个节点为空,
a2->next = NULL; 因为我们上面的while(a1 !=NULL)(上面有强调)
}
p1 = a1; 解析:最后的结果赋值给p1,然后a1 ,a2进入下一个节点
a1 = a1->next;
if(a2 !=NULL){
a2 = a2->next;
}
}
if(b == 1) 解析:如果最后的进位变量b为1的话,表示相比于原来的长度要多了一位,所以要从新添加一个新的节点newNode。
{
ListNode * newNode = new ListNode(1);
p1->next = newNode;
}
return l1;

}  

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值