【面試題 02.05】鏈表求和

題目

題目鏈接

給定兩個用鏈表表示的整數,每個節點包含一個數位。

這些數位是反向存放的,也就是個位排在鏈表首部。

編寫函數對這兩個整數求和,並用鏈表形式返回結果。

示例:

輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
輸出:2 -> 1 -> 9,即912

進階:假設這些數位是正向存放的,請再做一遍。

示例:

輸入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
輸出:9 -> 1 -> 2,即912

實現思路

純暴力 翻轉求和,構建單鏈表,雖然不是題目所要求,但是爲什麼leetcode不支持BigInteger

代碼

這個是錯誤的哦

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        while (l1 != null) {
            sb1.append(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            sb2.append(l2.val);
            l2 = l2.next;
        }
        sb1 = sb1.reverse();
        sb2 = sb2.reverse();
        BigInteger i1=new BigInteger(sb1.toString());
        BigInteger i2=new BigInteger(sb2.toString());
      /*  long i1 = Long.parseLong(sb1.toString());
        *//*  System.out.println("i1:" + i1);*//*
        long i2 = Long.parseLong(sb2.toString());
        *//*  System.out.println("i2:" + i2);*/

        /*  System.out.println("answer:" + answer);*/
        String answers = String.valueOf(i1.add(i2));
        char[] chars = answers.toCharArray();

        ListNode root = new ListNode(0);
        ListNode temp = root;
        for (int i = chars.length - 1; i >= 0; i--) {
            ListNode p = new ListNode(Integer.parseInt(chars[i] + ""));
            temp.next = p;
            temp = p;
        }

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