逆转链表,按位计算,最高位产生进位在表尾添加新节点,再次逆转,输出
class Solution {
public:
ListNode *reverse(ListNode *head){//逆转链表
if(!head->next) return head;
ListNode *p=head,*q=head->next,*r=NULL;
while(q){
p->next=r;
r=p;
p=q;
q=q->next;
}
p->next=r;
return p;
}
ListNode* plusOne(ListNode* head) {
// write code here
ListNode *h1=reverse(head),*p=h1;
int flag=0;//flag用于判断是否需要添加新节点
while(p){
if(p->val+1<10){
p->val++;
flag=0;
break;
}
else{
p->val=0;
p=p->next;
flag=1;
}
}
if(flag){//若最高位产生进位添加新节点
p=h1;
while(p->next) p=p->next;
ListNode *q=(ListNode*)malloc(sizeof(ListNode));
q->val=1;
q->next=NULL;
p->next=q;
}
return reverse(h1);
}
};

京公网安备 11010502036488号