369 plus one linked list

Input:
1->2->3

Output:
1->2->4

1,反轉(zhuǎn)后從左向右加一,當(dāng)最高位出現(xiàn)進(jìn)位的時(shí)候,額外申請(qǐng)一個(gè)節(jié)點(diǎn)保存進(jìn)位,之后在反轉(zhuǎn)鏈表并返回。
2,當(dāng)沒有進(jìn)位的適合不需要繼續(xù)遍歷鏈表
3,在遍歷鏈表做加一的同時(shí),記錄下當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),當(dāng)循環(huán)退出條件是p==NUll適合,同時(shí)又存在最高位有進(jìn)位的情況,需要prev指針指向這個(gè)進(jìn)位節(jié)點(diǎn)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head == NULL)
        return NULL;
    if(head->next == NULL)
        return head;
    struct ListNode *node;

    node = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;

    return node;    
}

struct ListNode* plusOne(struct ListNode* head) {
    
    struct ListNode *head1, *head2;
    struct ListNode *p,*prev;
    int val;
    if(head == NULL )
        return NULL;
    head1 = reverseList(head);
    p = head1;
    val = p->val +1;
    p->val = val%10;
    int carry = val/10;
    prev = p;
    p = p->next;
    while(p&&carry){
        val = p->val+carry;
        p->val = val%10;
        carry = val/10;
        prev = prev->next;
        p = p->next;
    }
   
    if(carry){
        printf("++");
        struct ListNode *node = malloc(sizeof(struct ListNode));
        node->val = carry;
        node->next = NULL;
        prev->next = node;
    }

    head2 = reverseList(head1);

    return head2;
}

struct ListNode* plusOne(struct ListNode* head) {
    
    struct ListNode *head1, *head2;
    struct ListNode *p,*prev;
    int val;
    if(head == NULL )
        return NULL;
    head1 = reverseList(head);
    p = head1;
    val = p->val +1;
    p->val = val%10;
    int carry = val/10;
    prev = p;
    p = p->next;
    while(p&&carry){
        val = p->val+carry;
        p->val = val%10;
        carry = val/10;
        prev = prev->next;
        p = p->next;
    }
   
    if(carry){
        printf("++");
        struct ListNode *node = malloc(sizeof(struct ListNode));
        node->val = carry;
        node->next = NULL;
        prev->next = node;
    }

    head2 = reverseList(head1);

    return head2;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容