2016-01-04 3 views
0

Я написал код для добавления двух целых чисел, сохраненных отдельно в 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(); 
} 
} 

Что случилось?

  1. Когда я сделать вызов, чтобы функционировать как это: addTwoLists(ListOne, ListTwo); код прекращается с NullPointerExcpetion на one.data() (указанный в коде выше), даже если один не равен NULL.
  2. Когда я звоню, чтобы работать следующим образом: addTwoLists(ListOne.head, ListTwo.head); Все работает отлично, никаких ошибок вообще, может ли кто-нибудь сказать мне, почему это происходит? Поскольку я приравниваю LinkList и голову (вы можете видеть это в конструкторе), оба должны работать нормально, но похоже, что это не так.
+0

@RC. Я ранее проверял, является ли список нулевым, если я не просто попытался отличить целое число, так как возможно, что список не равен null, а целое внутри? –

+0

@RC. Спасибо, на самом деле я создавал связанныйList как новый LinkList (null), а затем добавлял новые узлы к нему, используя insert. Следовательно, данные первого узла являются нулевыми, а предыдущие узлы заполняются. Вот почему я получаю NPE. Вы можете отправить это в поле ответа, чтобы я мог его принять –

ответ

1

Если вы разыгрываете нулевой Integer к int вы получите NullPointerException. Итак, если вы используете new LinkList(null), список не равен null, кроме его данных.

(В качестве примечания, вы должны сделать LinkListstatic)

Смежные вопросы