传递LinkList和LinkList.head

时间:2016-01-04 06:42:21

标签: java linked-list

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

列表1:5-> 5-> 2

同样适用于List2,我们说它是999

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

怎么了?

  1. 当我调用这样的函数时: addTwoLists(ListOne, ListTwo);代码以one.data()(在上面的代码中表示)中的NullPointerExcpetion终止,即使一个不是NULL。
  2. 当我调用这样的函数时: addTwoLists(ListOne.head, ListTwo.head);一切都运行得很好,没有任何错误,任何人都可以告诉我为什么会这样?因为我把LinkList和head等同起来(你可以在构造函数中看到它)两者都应该可以正常工作,但它看起来并不那么明显。

1 个答案:

答案 0 :(得分:1)

如果您将空Integer投射到int,则会获得NullPointerException。 因此,如果您使用new LinkList(null),则列表不为null,但其数据为。

(作为旁注,您应该LinkList static