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->3 Output: 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; } }