两数 相加
給出兩個(gè) 非空 的鏈表用來表示兩個(gè)非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
如果,我們將這兩個(gè)數(shù)相加起來,則會(huì)返回一個(gè)新的鏈表來表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
例如:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
題目來源力扣
當(dāng)兩鏈表長度相同時(shí):
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode l3= new ListNode(0);//構(gòu)造等長鏈表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);//為何追加不能使用這種方式:使用這種方式先執(zhí)行 l5=l5.next,這會(huì)導(dǎo)致 l5 指向空地址,l3 與 l5 將斷開聯(lián)系;應(yīng)該先創(chuàng)建 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;//構(gòu)造鏈表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;}數(shù)組:
總結(jié)
- 上一篇: C 语言 常见数据类型解析
- 下一篇: c语言 指针 数组还能这么用 ?