import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode plusOne (ListNode head) {
// write code here
// 反转链表,这样就可以从尾部开始相加,得到新的链表,然后在反转回去
ListNode reNode = resever(head);
ListNode root = reNode;
ListNode tail = null;
Integer last = null;
while (reNode != null) {
int sum = ((last == null) ? 1 : last) + reNode.val;
int val = sum % 10;
last = sum / 10;
reNode.val = val;
tail = reNode;
reNode = reNode.next;
}
if (last != 0) {
ListNode newNode = new ListNode(last);
tail.next = newNode;
}
return resever(root);
}
private ListNode resever(ListNode head) {
ListNode cur = head;
ListNode pre = null;
ListNode next = null;
while (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}