BiruLyu
6/8/2017 - 8:39 PM

369. Plus One Linked List(Recursive).java

public class Solution {
    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;
    }
}
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    
    public ListNode plusOne(ListNode head) {
        if(dfs(head)) {
            ListNode newHead = new ListNode(1);
            newHead.next = head;
            return newHead;
        } else {
            return head;
        }
    }
    
    private boolean dfs(ListNode head) {
        if(head == null) return true;
        boolean flag = dfs(head.next);
        if(flag) {
            int val = head.val + 1;
            head.val = val % 10;
            return val/10 != 0;
        }
        return false;
    }
    
}