用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。
你可以假设这个整数除了 0 本身,没有任何前导的 0。
这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。
示例:
输入: [1,2,3]
输出: [1,2,4]
反转再反转
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* plusOne(ListNode* head) {
if(!head){
return NULL;
}
auto q=reserve(head);
auto p=q;
int num=1;
while(p){
int x=p->val;
p->val=(p->val+num)%10;
if((x+num)/10==0)
break;
if(p->next==NULL&&num){
p->next=new ListNode (1);
break;
}
p=p->next;
}
return reserve(q);
}
ListNode* reserve(ListNode* head){
if(!head){
return head;
}
ListNode* pre=head;
ListNode* cur=NULL;
while(pre){
ListNode* temp=pre->next;
pre->next=cur;
cur=pre;
pre=temp;
}
return cur;
}
};