两数 相加
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,并且它們的每個節點只能存儲 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
例如:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
題目來源力扣
當兩鏈表長度相同時:
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode l3= new ListNode(0);//構造等長鏈表ListNode l5=l3;//指向 l3 末尾ListNode l6= new ListNode();//遍歷l1l6=l1;boolean a=true;while(l6.next!=null) {l5.next=new ListNode(0);//追加l5=l5.next;//15=new ListNode(0);//為何追加不能使用這種方式:使用這種方式先執行 l5=l5.next,這會導致 l5 指向空地址,l3 與 l5 將斷開聯系;應該先創建 next,再指向l6=l6.next;if(l6.next==null) {l5.next=new ListNode(-1);//判斷終止條件a=false;}}if(a) {l5.next=new ListNode(-1);//判斷終止條件}ListNode l4= l3;int m=0;while(l4.val!=-1){l4.val=0;int n=0;n=l1.val+l2.val+m;l4.val=n%10;m=n/10;l1=l1.next;l2=l2.next;l4=l4.next;System.out.println(n%10);}l5.next=null;//刪去終止條件return l3; }class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val; }ListNode(int val, ListNode next) {this.val = val; this.next = next;} }長度小于二的32次方:
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {int n1 =getSum(l1);int n2 =getSum(l2);int sum=n1+n2;ListNode l3= new ListNode();ListNode l4=l3;do{l4.val=sum%10;//賦值//System.out.println(l4.val);l4.next=new ListNode();l4=l4.next;//構造鏈表sum=sum / 10;}while(sum > 0);l4=null;//除去末尾的0值return l3;}public static int getSum(ListNode l3){int n3=0,e=1;do{n3+=e*l3.val;l3=l3.next;e*=10;}while(l3!=null);return n3;}數組:
總結
- 上一篇: C 语言 常见数据类型解析
- 下一篇: 三数之和(Java、C实现)