题目 :02 Add two numbers 难度:Medium
解题思路:本来就不是一个很难的问题。我一开始是把两个linked list转换为两个整数,然后进行相加,发现会溢出,而且对计算的数据长度有很大的限制,于是就改用按位相加的方法,具体步骤如下:
1. 构造vector,用来存储获得的位
2. 提取l1和l2的当前结点 分成四种情况来进行计算,分别是(判断当前结点是否为空)
1> l1和l2都不为空 2>l1为空,l2不为空 3>l1不为空,l2为空 4>l1,l2都为空
3. 进行计算,如有进位,则一并加上4. 最后将vector表达为链表,并返回此链表
具体代码如下:
ListNode* addTwoNumbers(ListNode *l1,ListNode *l2)
{
vector<int>vec;//用来存储结果
int come=0;//用来存储进位
while(l1!=NULL||l2!=NULL)
{
if(l1!=NULL&&l2!=NULL)
{
int temp=l1->val+l2->val;
temp+=come;
if(temp>=10)
{
int num=temp%10;
vec.push_back(num);
come=1;
}
else
{
vec.push_back(temp);
come=0;
}
}
if(l1!=NULL&&l2==NULL)
{
int temp=l1->val;
temp+=come;
if(temp>=10)
{
int num=temp%10;
vec.push_back(num);
come=1;
}
else
{
vec.push_back(temp);
come=0;
}
}
if(l1==NULL&&l2==NULL)
{
int temp=l2->val;
temp+=come;
if(temp>=10)
{
int num=temp%10;
vec.push_back(num);
come=1;
}
else
{
vec.push_back(temp);
come=0;
}
}
l1=l1->next;
l2=l2->next;
}
ListNode *all=new ListNode(vec[0]);
ListNode *Current=all;
int i=1;
while(1)
{
if(i>=vec.size()-1)
break;
ListNode *temp=new ListNode(vec[i]);
Current->next=temp;
Current=temp;
i+=1;
}
return all;
}