/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
// 反转链表
function reverse (node) {
  let pre = null
  let cur = node
  let next = null
  
  while (cur) {
    next = cur.next
    cur.next = pre
    pre = cur
    cur = next
  }
  
  return pre
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
function plusOne( head ) {
  let cur = reverse(head)
  let result = new ListNode(-1),
      temp = result,
      flag = false
  
  while (cur) {
    if (!flag) cur.val += 1
    flag = true
    
    if (cur.val > 9) {
      cur.val = 0
      flag = false
      temp.next = cur
      temp = temp.next
    } else {
      temp.next = cur
      temp = temp.next
    }
    
    cur = cur.next
  }
  
  if (temp.val === 0) {
    temp.next = new ListNode(1)
  }
  
  return reverse(result.next)
}
module.exports = {
    plusOne : plusOne
};