首页 > 代码库 > 369. Plus One Linked List

369. Plus One Linked List

Given a non-negative number represented as a singly linked list of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

Example:

Input:1->2->3Output:1->2->4

ListNode* plusOne(ListNode* head) {        ListNode *l1 = reverse(head);        ListNode* cur = l1, *nh = NULL;        int c = 1;        while (cur != NULL) {            cur->val += c;            c = cur->val / 10;            cur->val %= 10;            cur = cur->next;        }        l1 = reverse(l1);                if (c != 0) {            nh = new ListNode(c);            nh->next = l1;            l1 = nh;        }        return l1;    }        ListNode* reverse(ListNode* head) {        ListNode* prev = NULL;        ListNode* cur = head;        ListNode* nxt = NULL;        while (cur != NULL) {            nxt = cur->next;            cur->next = prev;            prev = cur;            cur = nxt;        }        return prev;    }
public class Solution {// two pointer    public ListNode plusOne(ListNode head) {        ListNode dummy = new ListNode(0);        dummy.next = head;        ListNode i = dummy;        ListNode j = dummy;        while (j.next != null) {            j = j.next;            if (j.val != 9) {                i = j;            }        }        // i = index of last non-9 digit            i.val++;        i = i.next;        while (i != null) {            i.val = 0;            i = i.next;        }                if (dummy.val == 0) return dummy.next;        return dummy;    }}

 

369. Plus One Linked List