我写了一段代码,将两个单独存储在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();
}
}
怎么了
- 当我这样调用函数时:
addTwoLists(ListOne, ListTwo);
代码在one.data()处以NullPointerExcpetion终止(如上面的代码所示),即使其中一个不是NULL - 当我这样调用函数时:
addTwoLists(ListOne.head, ListTwo.head);
一切都很好,没有任何错误,有人能告诉我为什么会发生这种情况吗?由于我将LinkList和head等同起来(你可以在构造函数中看到),两者都应该可以正常工作,但看起来并不那么明显
如果将空Integer
强制转换为int
,则会得到NullPointerException
。因此,如果在某个地方使用new LinkList(null)
,则列表不是空的,但其数据是。
(附带说明一下,您应该使LinkList
static
)