Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
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]
思路: 反转链表,然后+1,再反转链表;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode plusOne(ListNode head) {
if(head == null) {
return null;
}
ListNode newhead = reverse(head);
int carry = 1;
ListNode node = newhead;
while(carry != 0 ) {
int sum = node.val + carry;
carry = sum / 10;
node.val = sum % 10;
if(node.next != null) {
node = node.next;
} else {
if(carry == 1) {
node.next = new ListNode(1);
break;
}
}
}
return reverse(newhead);
}
private ListNode reverse(ListNode node) {
ListNode dummpy = new ListNode(0);
dummpy.next = node;
ListNode cur = node;
while(cur!= null && cur.next != null) {
ListNode nextnode = cur.next;
cur.next = nextnode.next;
nextnode.next = dummpy.next;
dummpy.next = nextnode;
}
return dummpy.next;
}
}
思路2:找到最后一个!=9的node,直接+1即可,如果没有,那么就证明全部是9,然后生成一个新node,后面的全部变为0;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode plusOne(ListNode head) {
if(head == null) {
return null;
}
ListNode node = head;
ListNode notnine = null;
while(node != null) {
if(node.val != 9) {
notnine = node;
}
node = node.next;
}
if(notnine == null) {
ListNode newhead = new ListNode(1);
newhead.next = head;
node = head;
while(node != null){
node.val = 0;
node = node.next;
}
return newhead;
} else {
notnine.val += 1;
node = notnine.next;
while(node != null) {
node.val = 0;
node = node.next;
}
return head;
}
}
}