Leetcode-2Add 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题目解析
其实就是长整数相加的问题,不过以链表的形式存储每位的值。- 解题方法
依次对应位置的数相加,保留进位,用于高位计算。
实现代码
C++如下:
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int jinwei=0,f=0,j=0,sum=0;
ListNode* p=l1;
ListNode* q=l2;
vector<int> result;//保存计算结果,从低位到高位依次保存
while(p!=NULL||q!=NULL){
f=0;
j=0;
if(p!=NULL)
{
f=p->val;
p=p->next;
}
if(q!=NULL){
j=q->val;
q=q->next;
}
sum=f+j+jinwei;
if(sum>10)
{
sum=sum%10;
jinwei=1;
}
else
jinwei=0;
result.push_back(sum);
}
if(result.size()==0)
return NULL;
//由数组构建链表
ListNode *s=new ListNode(result[0]);
ListNode *s2=s;
for(int i=1;i<result.size();i++){
ListNode *s1=new ListNode(result[1]);
s2->next=s1;
s2=s1;
}
return s;
}