算法二:两数相加
?
題目: 給出兩個?非空?的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照?逆序?的方式存儲的,并且它們的每個節點只能存儲?一位?數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0?開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807 /* 執行用時 : 36 ms, 在Add Two Numbers的Java提交中擊敗了81.80% 的用戶 內存消耗 : 43.3 MB, 在Add Two Numbers的Java提交中擊敗了48.15% 的用戶打敗了81%的用戶,挺滿意....這一天我會很開心。。。 */package com.atchina;// Definition for singly-linked list.class ListNode {int val;ListNode next;ListNode(int x) { val = x; }}public class AlgoCode {public static void main(String[] args) {// System.out.println("hello world!!");AlgoCode algo = new AlgoCode();// algo.addTwoNumbers(l1, l2); // ListNode l1 = new ListNode(2); // ListNode l11 = new ListNode(4); // ListNode l12 = new ListNode(3); // l1.next = l11; // l11.next = l12;// ListNode l1 = new ListNode(5); // ListNode l2 = new ListNode(5);//ListNode l21 = new ListNode(6);// ListNode l22 = new ListNode(4);//l2.next = l21;//l21.next = l22;// ListNode l1 = new ListNode(1); // ListNode l2 = new ListNode(9); // ListNode l21 = new ListNode(9); // l2.next = l21;ListNode l1 = new ListNode(9);ListNode l11 = new ListNode(9);l1.next = l11;ListNode l2 = new ListNode(9);ListNode r = algo.addTwoNumbers(l1, l2);while(null != r ){System.out.println(r.val);r = r.next;}}public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//System.out.println(l1.next.val);int i = -1;ListNode p = l1;ListNode q = l2;ListNode r = null;ListNode t = null;int res = 0;while(null != p && null != q){i = p.val + q.val+res;// System.out.println(p.val+" "+q.val+" "+res+" "+i);if(i>9){res = i%10;}else{res = i;}if(null == r){r = new ListNode(res);t = r;}else{t.next = new ListNode(res);t = t.next;}if(i>9){res = i/10;}else{res = 0;}p = p.next;q = q.next;// System.out.println(p+""+q);}// p鏈表還有位數while(null != p){if(res>0){p.val = p.val+res;// res = 0;}if(p.val >9){res = p.val;p.val = p.val%10;}t.next = new ListNode(p.val);t = t.next;p = p.next;if(res>9)res = res/10;elseres = 0;}// q鏈表還有位數while(null != q ){if(res>0){q.val = q.val+res;}if(q.val >9){res = q.val;q.val = q.val%10;}t.next = new ListNode(q.val);t = t.next;q = q.next;if(res>9)res = res/10;elseres = 0;}// p,q的位數都已經相加完畢,但是還有進位if(null == p && null == q && res >0){t.next = new ListNode(res);t = t.next;}return r;} }?
總結
- 上一篇: linux系统管理命令,压缩命令
- 下一篇: linux:安装jre