第一种:只能通过部分(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;
}
}