369. Plus One Linked List
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode plusOne(ListNode head) { // put two numbers into stack separtely // when pop them out, we add two numbers and keep a carry for the next // digit, and push every sum into the stack // after we done pushing the sum into the stack, // we can pop them out and link them into a linked list ListNode l2 = new ListNode(1); Deque<ListNode> stack1 = new ArrayDeque<>(); Deque<ListNode> stack2 = new ArrayDeque<>(); while(head != null) { stack1.push(head); head = head.next; } while( l2 != null) { stack2.push(l2); l2 = l2.next; } int carry = 0; Deque<Integer> stack = new ArrayDeque<>(); while( !stack1.isEmpty() || !stack2.isEmpty()){ int num1 = stack1.size() == 0 ? 0 : stack1.pop().val; int num2 = stack2.size() == 0 ? 0 : stack2.pop().val; int sum = carry + num1 + num2; carry = sum / 10; sum = sum % 10; stack.push(sum); } if( carry != 0){ stack.push(carry); } ListNode dummy = new ListNode(0); ListNode cur = dummy; while(!stack.isEmpty()){ int number = stack.pop(); ListNode newListNode = new ListNode(number); cur.next = newListNode; cur = cur.next; } return dummy.next; } }
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
posted on 2018-07-18 09:27 猪猪🐷 阅读(94) 评论(0) 收藏 举报
浙公网安备 33010602011771号