第一種:只能通過部分(Long範圍內的案例,超出Long的結果會報錯,估計出題人並不想讓你走捷徑23333)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
import java.util.Stack;
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Stack<Integer> a1=new Stack<Integer>();
Stack<Integer> a2=new Stack<Integer>();//用了兩個棧
ListNode l3 = new ListNode(0);
ListNode p=new ListNode(0);
p=l3;
while(l1.next!=null) {
a1.push(l1.val);
l1=l1.next;
}
a1.push(l1.val);
while(l2.next!=null) {
a2.push(l2.val);
l2=l2.next;
}
a2.push(l2.val);
long long num=0,i=0,j=0;
while(!a1.empty()) {
i=i*10+a1.pop();
}
while(!a2.empty()) {
j=j*10+a2.pop();
}
num=i+j;//相加得到結果
//System.out.println(num);
while(num>=10){
int temp=new Long(num % 10).intValue();
ListNode ls=new ListNode(0);
p.val = temp;
p.next = ls;
p = ls;
num = num / 10 ;
}
int temp=new Long(num % 10).intValue();
p.val =temp ;
return l3;
}
}
第二種:官方標配進位版
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null)
return l2;
if(l2==null)
return l1;
ListNode head=new ListNode(0);
ListNode current;current=head;
ListNode p=l1,q=l2;
int carry=0;//初始化進位爲0
while(p!=null||q!=null){
int x=(p!=null)?p.val:0;
int y=(q!=null)?q.val:0;
int sum=carry+x+y;//每次的和都要用到上次的進位
carry=sum/10;//類似於學得加法,每次更新進位
current.next=new ListNode(sum%10);
current=current.next;
if(p!=null) p=p.next;
if(q!=null) q=q.next;
}
if(carry>0)
current.next=new ListNode(carry);
return head.next;
}
}