我编写了一个代码,将两个单独存储在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