leetCode 第二题 两个数的和
2018-04-07 00:19
204 查看
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:1、设置一个进位标志overload;每一位的和 sum=l1->val+l2->val+overload; 2、如果这个和大于10的话 就sum%=10;overload =1;更新这个和,并且进位标志改为1; 3、如果不大于10;sum不变,overload=0;
4、把这个值赋给链表;并且更新链表的下一个位置;pCurrent=ListNode(sum);pCurrent=pCurrent->next;/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* pHead=new ListNode(0);
ListNode *pCurrent=pHead;
int overload=0;//是不是有进位;有进位为1;
while(l1||l2||overload)
{
int sum=(l1?l1->val:0)+(l2?l2->val:0)+overload;//某一位的值为l1/l2的值加上进位的值;
if(sum>=10)//如果这个和大于10
{
sum%=10;//更新这个值
overload=1;//并且产生进位;
}
else
overload=0;
pCurrent->next=new ListNode(sum);//将当前的值赋给第一位;也就是个位数;
pCurrent=pCurrent->next;//当前的位置往下进行;也就是十位数
if(l1) l1=l1->next;//l1链表往后遍历;
if(l2) l2=l2->next;//l2链表往后遍历;
}
return pHead->next;
}
};
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:1、设置一个进位标志overload;每一位的和 sum=l1->val+l2->val+overload; 2、如果这个和大于10的话 就sum%=10;overload =1;更新这个和,并且进位标志改为1; 3、如果不大于10;sum不变,overload=0;
4、把这个值赋给链表;并且更新链表的下一个位置;pCurrent=ListNode(sum);pCurrent=pCurrent->next;/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* pHead=new ListNode(0);
ListNode *pCurrent=pHead;
int overload=0;//是不是有进位;有进位为1;
while(l1||l2||overload)
{
int sum=(l1?l1->val:0)+(l2?l2->val:0)+overload;//某一位的值为l1/l2的值加上进位的值;
if(sum>=10)//如果这个和大于10
{
sum%=10;//更新这个值
overload=1;//并且产生进位;
}
else
overload=0;
pCurrent->next=new ListNode(sum);//将当前的值赋给第一位;也就是个位数;
pCurrent=pCurrent->next;//当前的位置往下进行;也就是十位数
if(l1) l1=l1->next;//l1链表往后遍历;
if(l2) l2=l2->next;//l2链表往后遍历;
}
return pHead->next;
}
};
相关文章推荐
- LeetCode第二题--实现两个数的和
- LeetCode第一题--两个数的和
- 算法分析与设计丨第二周丨LeetCode(4)——Maximum Subarray(Easy)
- LeetCode中关于两个数相加的问题
- LeetCode | Divide Two Integers(两个数相除)
- leetcode_java_第二题 ReserveInteger
- LeetCode_001 求两个数的和
- LeetCode 1 找出两个数之和
- 【leetcode】Two Sum II - Input array is sorted(输入有序的数组,求两个数的和)
- LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
- LeetCode第二关:Add Two Numbers --> Difficulty: Medium
- LeetCode之操作两个数相除DivideTwoIntegers
- [LeetCode]1. 2Sum 数组中和为特定值的两个数
- 【leetcode】第二题
- LeetCode219 查找相等两个数之间的最小距离
- [LeetCode]2 两个数相加
- 后缀表达式求值--leetcode第二题
- leetcode:258 Add Digits-每日编程第二题
- leetcode第二题--Median of Two Sorted Arrays
- leetcode:两个数的和||