题目:
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.
E.g. Input: 1->2->3
Output: 1->2->4
Input: 0
Output: 1
Input: 7->9
Output: 8->0
Input: 9->9
Output: 1->0->0
public class SolutionPlusOneLinkedList { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public static ListNode plusOne(ListNode head) { // Step 1: Define return value ListNode dummy = new ListNode(0); dummy.next = head; // Step 3: fill in business logic // think about e.g. 1999, 1989 // j -> the last digit // i -> the most significant digit that could have a carry ListNode i = dummy; ListNode j = dummy; while (j.next != null){ j = j.next; if (j.val != 9){ i = j; } } if (j.val != 9){ j.val++; }else { i.val++; i = i.next; while (i != null) { i.val = 0; i = i.next; } } // Step 2: Handle corner cases // No negative, may have carry. if (dummy.val == 0){ return dummy.next; } return dummy; } public static void printLinkedList(ListNode node){ while (node != null){ if (node.next != null){ System.out.print(node.val + "->"); }else { System.out.print(node.val); } node = node.next; } System.out.println(); } public static void main(String[] args) { ListNode head = new ListNode(9); ListNode node1 = new ListNode(9); ListNode node2 = new ListNode(8); ListNode node3 = new ListNode(5); head.next = node1; node1.next = node2; node2.next = node3; System.out.println("原始链表"); printLinkedList(head); ListNode node = plusOne(head); System.out.println("加一链表"); printLinkedList(node); } }