我编写了一个代码,用于添加在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();
}
}
怎么了?
addTwoLists(ListOne, ListTwo);
代码以one.data()(在上面的代码中表示)中的NullPointerExcpetion终止,即使一个不是NULL。addTwoLists(ListOne.head, ListTwo.head);
一切都运行得很好,没有任何错误,任何人都可以告诉我为什么会这样?因为我把LinkList和head等同起来(你可以在构造函数中看到它)两者都应该可以正常工作,但它看起来并不那么明显。答案 0 :(得分:1)
如果您将空Integer
投射到int
,则会获得NullPointerException
。
因此,如果您使用new LinkList(null)
,则列表不为null,但其数据为。
(作为旁注,您应该LinkList
static
)