我编写了一个代码,将两个单独存储在LinkedList中的整数相加。
例如List1的编号255以相反的顺序存储

清单1:5-> 5-> 2

同样,对于List2,假设它是999

清单2:9-> 9-> 9

预期的答案是255 + 999 = 1254

Ans:4-> 5-> 2-> 1(相反顺序)



public class imacoder{

class LinkList<T>{
    imacoder.LinkList<T> next;
    T data;
    imacoder.LinkList<T> head;

    public LinkList(T data){
        head = this;
        this.data = data;
    }

    public LinkList(){

    }

    public void printall(){
        if(head==null){
            System.out.println("Null list");
            return;
        }
        imacoder.LinkList<T> temp = head;
        while(temp.next!=null){
            System.out.print(temp.data + "->");
            temp = temp.next;
        }
        System.out.println(temp.data);
    }

    public void insert(T data){
        if (head==null){
            head = new imacoder().new LinkList(data);

        }else{
            imacoder.LinkList<T> temp = head;
            while(temp.next!=null)
                temp = temp.next;
            temp.next = new imacoder.LinkList<T>(data);
        }
    }

}


public static void addTwoLists(imacoder.LinkList one, imacoder.LinkList two){
    int carry = 0;
    LinkList temp = one;
    LinkList res = new imacoder().new LinkList();

    while(one!=null || two!=null){
        int oneVal, twoval;

        if(one==null)
            oneVal = 0;
        else
            oneVal = (int)one.data;  //NullPointerException over here

        if(two==null)
            twoval = 0;
        else
            twoval = (int)two.data;
        int ans = 0;
        if(carry==0){
            ans = oneVal + twoval;
            if(ans>9){
                carry = 1;
                ans = ans%10;
                res.insert(ans);
            }else{
                carry = 0;
                res.insert(ans);
            }

        }else{
            ans = oneVal + twoval + carry;
            if(ans>9){
                carry = 1;
                ans = ans%10;
                res.insert(ans);
            }else{
                carry = 0;
                res.insert(ans);
            }
        }
        if(one!=null)
            one = one.next;
        if(two!=null)
            two = two.next;
    }

    if(carry!=0){
        res.insert(carry);
    }
    res.printall();
}
}


怎么了?


当我调用这样的函数时:
addTwoLists(ListOne, ListTwo);该代码以NullPointerExcpetion在one.data()处终止(在上面的代码中指示),即使其中一个不为NULL。
当我调用这样的函数时:
addTwoLists(ListOne.head, ListTwo.head);一切运行正常,完全没有错误,谁能告诉我为什么会这样?由于我将LinkList和head等同起来(您可以在构造函数中看到它),所以两者都可以正常工作,但似乎并不那么明显。

最佳答案

如果将空Integer强制转换为int,则会得到一个NullPointerException
因此,如果在某个地方使用new LinkList(null),则列表不是null,而其数据是。

(作为旁注,您应该将LinkList static

10-07 20:44
查看更多