CCCV大会志愿者三天,代码是来之前通过的。
比较简单,链表相加考虑进位。
动态分配单链表操作有一些遗忘,做题之前看了一下链表基本操作(参考http://c.biancheng.net/cpp/html/2672.html)
在本题中复杂的操作没有,主要是创建链表和在尾部插入链表。
代码如下:
#include<iostream>
using namespace std;
// Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
private:
int max(int a,int b)
{
return a>b?a:b;
}
void insert(ListNode*l,ListNode*p)
{
ListNode * r = l;
while(r->next!=NULL)
{
r=r->next;
}
r->next=p;
}
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result=new ListNode(0);
int mol=0;
int sum=0;
int exc = 0;
int l1_val=0;
int l2_val=0;
while(l1!=NULL || l2!=NULL)
{
if(l1)
{
l1_val = l1->val;
}
else
{
l1_val=0;
}
if(l2)
{
l2_val = l2->val;
}
else
{
l2_val=0;
}
sum=l1_val + l2_val + exc;
exc = sum / 10;
mol = sum % 10;
ListNode*p = new ListNode(mol);
insert(result,p);
if(l1)
l1=l1->next;
if(l2)
l2=l2->next;
}
if(exc>0)
{
ListNode*p = new ListNode(exc);
insert(result,p);
}
result=result-next;//输出格式
return result;
}
};
唯一需要注意的是两条链表不等长的情况下,短的那条在后续的相加中,值为0。
最后就是注意输出格式了。