445. Add Two Numbers II
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { // 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 Deque<ListNode> stack1 = new ArrayDeque<>(); Deque<ListNode> stack2 = new ArrayDeque<>(); while(l1 != null) { stack1.push(l1); l1 = l1.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; } }
////// others code public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> s1 = new Stack<Integer>(); Stack<Integer> s2 = new Stack<Integer>(); while(l1 != null) { s1.push(l1.val); l1 = l1.next; }; while(l2 != null) { s2.push(l2.val); l2 = l2.next; } int sum = 0; ListNode list = new ListNode(0); while (!s1.empty() || !s2.empty()) { if (!s1.empty()) sum += s1.pop(); if (!s2.empty()) sum += s2.pop(); list.val = sum % 10; ListNode head = new ListNode(sum / 10); head.next = list; list = head; sum /= 10; } return list.val == 0 ? list.next : list; } }
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 8 -> 0 -> 7
posted on 2018-07-18 09:26 猪猪🐷 阅读(114) 评论(0) 收藏 举报
浙公网安备 33010602011771号