Я написал код для добавления двух целых чисел, сохраненных отдельно в LinkedList. например List1 имеет номер 255, хранящийся в обратном порядкеРазница в пропуске LinkList и LinkList.head
List1: 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);
код прекращается с NullPointerExcpetion на one.data() (указанный в коде выше), даже если один не равен NULL. - Когда я звоню, чтобы работать следующим образом:
addTwoLists(ListOne.head, ListTwo.head);
Все работает отлично, никаких ошибок вообще, может ли кто-нибудь сказать мне, почему это происходит? Поскольку я приравниваю LinkList и голову (вы можете видеть это в конструкторе), оба должны работать нормально, но похоже, что это не так.
@RC. Я ранее проверял, является ли список нулевым, если я не просто попытался отличить целое число, так как возможно, что список не равен null, а целое внутри? –
@RC. Спасибо, на самом деле я создавал связанныйList как новый LinkList (null), а затем добавлял новые узлы к нему, используя insert. Следовательно, данные первого узла являются нулевыми, а предыдущие узлы заполняются. Вот почему я получаю NPE. Вы можете отправить это в поле ответа, чтобы я мог его принять –