传递LinkList和LinkList.head的区别



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

清单1:5->5->2

清单2也是如此,假设它是999

清单2:9->9->9

预期答案为255+999=1254

答案: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();
}
}

怎么了

  1. 当我这样调用函数时:addTwoLists(ListOne, ListTwo);代码在one.data()处以NullPointerExcpetion终止(如上面的代码所示),即使其中一个不是NULL
  2. 当我这样调用函数时:addTwoLists(ListOne.head, ListTwo.head);一切都很好,没有任何错误,有人能告诉我为什么会发生这种情况吗?由于我将LinkList和head等同起来(你可以在构造函数中看到),两者都应该可以正常工作,但看起来并不那么明显

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

(附带说明一下,您应该使LinkList static

相关内容

  • 没有找到相关文章

最新更新