LeetCode、2-Add two numbers

来源:互联网 发布:万方数据库论文查询 编辑:程序博客网 时间:2024/05/03 13:19

这里写图片描述

考察的链表,当时学的时候对指针还不太懂,现在看起来这么理所当然。

这个题注意RE,我代码注释里有写。

package com;import java.util.ArrayList;import java.util.List;/** * Created by hms on 2016/12/23. */public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ArrayList<Integer> a1 = new ArrayList<>();        ArrayList<Integer> a2 = new ArrayList<>();        ArrayList<Integer> a3 = new ArrayList<>();        ArrayList<Integer> a4 = new ArrayList<>();        while (true){            int x = l1.val;            a1.add(x);            l1 = l1.next;            if(l1 == null){                break;            }        }        while(true){            int x = l2.val;            a2.add(x);            l2 = l2.next;            if(l2 == null){                break;            }        }        int as = a1.size();        int bs = a2.size();        for(int i = as-1; i >= 0; --i){            a3.add(a1.get(i));        }        for(int i = bs-1; i >= 0; --i){            a4.add(a2.get(i));        }        ArrayList<Integer> res = new ArrayList<>();        int m = a3.size();        int n = a4.size();        int i = m-1;        int j = n-1;        int add = 0;        while (true){            int a = (i >= 0 ? a3.get(i) : 0);            int b = (j >= 0 ? a4.get(j) : 0);            if(a + b + add < 10){                res.add(a+b + add);                add = 0;            }else{                res.add(a+b+add - 10);                add = 1;            }            if(i == -1) i = -1; else --i;            if(j == -1) j = -1; else --j;            if(i == -1 && j == -1) break;        }        if(add == 1){            res.add(1);        }       int k = res.size();       ListNode listNode = new ListNode(0);       listNode.next = null; //少了这句RE       ListNode node = listNode;       for(int q = 0; q < k; ++q){           if(q == 0) listNode.val = res.get(q);           else {               ListNode newl = new ListNode(res.get(q));               node.next = newl;               node = node.next;           }        }        return listNode;    }    public static void main(String[] args) {        Solution solution = new Solution();        ListNode l1 = new ListNode(2);        ListNode l2 = new ListNode(4);        ListNode l3 = new ListNode(3);        l1.next = l2;        l2.next = l3;        ListNode l4 = new ListNode(5);        ListNode l5 = new ListNode(6);        ListNode l6 = new ListNode(4);        l4.next = l5;        l5.next = l6;        ListNode listNode = solution.addTwoNumbers(l1, l4);        while(true){            if(listNode == null){                break;            }else{                System.out.println(listNode.val);                listNode = listNode.next;            }        }    }}class ListNode {    int val;    ListNode next;    ListNode(int x) { val = x; }}
0 0
原创粉丝点击