力扣 369. 給單鏈表加一
阿新 • • 發佈:2020-12-08
技術標籤:力扣刷題
用一個 非空 單鏈表來表示一個非負整數,然後將這個整數加一。
你可以假設這個整數除了 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;
}
};