# 方法一

/**
* struct ListNode {
*	int val;
*	struct ListNode *next;
*	ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
*
*
* @return ListNode类
*/
int sum(ListNode* p){
//最低位特殊处理，是加1
if (p->next == NULL)
{
p->val = (p->val + 1)%10;
if (!p->val) return 1;
else return 0;
}
int jinwei = sum(p->next);
int nextjinwei = (p->val + jinwei)/10;
p->val = (p->val + jinwei)%10;
return nextjinwei;
}

// write code here
//看最高位是否还要进位
if (jinwei == 1)
{
ListNode *p = new ListNode(1);
}
}
};


# 方法二

/**
* struct ListNode {
*	int val;
*	struct ListNode *next;
*	ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
*
*
* @return ListNode类
*/

// write code here
vector<int> number;
//转化为数组形式
while (p!=NULL)
{
number.push_back(p->val);
p = p->next;
}
//处理加1计算
int i = number.size()-1;
int jinwei = (number[i] + 1)/10;
number[i] = (number[i] + 1)%10;
i--;
while (jinwei && i>=0)
{
number[i] = (number[i] + jinwei)%10;
if (!number[i]) jinwei = 1;
else jinwei = 0;
i--;
}
if (jinwei) number.insert(number.begin(), 1);
//转换为单向链表形式
for (i=0;i<number.size();i++)
{
ListNode *node = new ListNode(number[i]);
if (p!=NULL) p->next = node;
p = node;