LinkedList Numbers Add

来源:互联网 发布:美工完成工作进度表 编辑:程序博客网 时间:2024/06/07 20:16
//recursive, Time Complexity: O(N), Space Complexity: O(N).public Node addLinkedList(Node node1, Node node2) {int carry = 0;return recursive(node1, node2, carry);}public static Node recursive(Node node1, Node node2, int carry) {if(node1 == null && node2 == null && carry == 0) {return null;}Node node = new Node();int value = carry;if(node1 != null) {value += node1.data;}if(node2 != null) {value += node2.data;}node.data = value % 10;carry = value / 10;if(node1 != null || node2 != null || carry != 0) {Node more = recursive(node1 == null ? null : node1.next, node2 == null ? null : node2.next, carry);node.next = more;}return node;}//iterative, Time Complexity: O(N), Space Complexity: O(N).public static Node addLinkedList(Node node1, Node node2) {if(node1 == null) {return node2;}if(node2 == null) {return node1;}Node head = new Node();head.data = (node1.data + node2.data) % 10;int carry = (node1.data + node2.data) / 10;Node move = head;int a = 0;int b = 0;while(node1.next != null || node2.next != null || carry != 0) {if(node1.next != null) {node1 = node1.next;a = node1.data;}else {a = 0;}if(node2.next != null) {node2 = node2.next;b = node2.data;} else {b = 0;}Node node = new Node();node.data = (a + b + carry) % 10;carry = (a + b + carry) / 10;move.next = node;move = node;}return head;}
//suppose the digits are stored in forward orderpublic Node addLists(Node1 node1, Node1 node2) {if(node1 == null) {return node2;}if(node2 == null) {return node1;}int length1 = length(node1);int length2 = length(node2);if(length1 > length2) {node2 = padding(node2, length1 - length2);}else if(length1 < length2) {node1 = padding(node1, length2 - length1);}Node p = null;Node q = null;Node pre = null;Node ans = null;//for the headint first = node1.data + node2.data;pre = new Node();ans = new Node();if(first >= 9) {pre.data = first % 10;ans.next = pre;if(first >= 10) {ans.data = 1;p = pre;}else {ans.data = 0;p = ans;}}else {ans.data = first;p = ans;pre = ans;}while(node1.next != null && node2.next != null) {node1 = node1.next;node2 = node2.next;q = new Node();pre.next = q;int num = node1.data + node2.data;q.data = num % 10;if(num > 9) {p.data = p.data + 1;for(p = p.next; p != q; p = p.next) {p.data = 0;}}else if(num < 9) {p = q;  }pre = q;}if(ans.data == 0) {ans = ans.next;}return ans;}public int length(Node head) {Node1 move = head;int count = 0;while(move != null) {count++;move = move.next;}return count;}public Node padding(Node head, int a) {Node1 newHead = head;for(int i = 0; i < a; i++) {Node node = new Node();node.next = newHead;node.data = 0;newHead = node;}return newHead;}