题目描述:
Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
Example :
Input: [1,2,3]
Output: [1,2,4]
class Solution {
public:
ListNode* plusOne(ListNode* head) {
if(head==NULL) return NULL;
ListNode* rhead=reverse(head);
int carry=1;
ListNode* p=rhead;
ListNode* pre=p;
while(carry&&p)
{
int x=p->val+carry;
p->val=x%10;
carry=x/10;
pre=p;
p=p->next;
}
if(carry) pre->next=new ListNode(1);
return reverse(rhead);
}
ListNode* reverse(ListNode* head)
{
if(head==NULL||head->next==NULL) return head;
ListNode* dummy=new ListNode(0);
dummy->next=head;
ListNode* p=head;
ListNode* pre=dummy;
while(p->next)
{
ListNode* tmp=p->next;
p->next=p->next->next;
tmp->next=dummy->next;
dummy->next=tmp;
}
return dummy->next;
}
};
class Solution {
public:
ListNode* plusOne(ListNode* head) {
ListNode* p=head;
ListNode* right=NULL;
while(p) // 找到最右边不为9的节点标记为right
{
if(p->val!=9) right=p;
p=p->next;
}
if(!right) //所有节点都是9的情况下,增加一个节点放在最左边
{
right=new ListNode(0);
right->next=head;
head=right;
}
right->val++;
p=right->next;
while(p) //right右边的所有数字变成0
{
p->val=0;
p=p->next;
}
return head;
}
};