:LeetCode-2.两个列表相加Add Two Numbers --Java(错误与正确两种)


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

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/80644330