: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;
        
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章