2015-04-21 5 views
0
package uni; 

    import java.util.*; 

    public class Link { 

     public int data; 
     public Link next; 
     int iData; 
     Link header = null; 
     Link idata; 

     public Link(int data) { 
      this.data = data; 
     } 

     public void LinkDisplay() { 
      System.out.println("Data: " + data); 
     } 

     /** 
     * @param args the command line arguments 
     */ 
     public static void main(String[] args) { 
      Scanner input = new Scanner(System.in); 
      LinkedList linkedList = new LinkedList(); 

      int num; 
      for (int i = 0; i < 3; i++) { 
       System.out.println("Enter data"); 
       num = input.nextInt(); 
       linkedList.insertLink(num); 
      } 

      linkedList.DiaplayAll(); 
      linkedList.deleteFirst(); 

     } 

    } 

    class LinkedList { 

     public Link first; 
     Link header = null; 

     public void insertLink(int data) { 
      Link newLink = new Link(data); 
      newLink.next = first; 
      first = newLink; 
     } 

     public void DiaplayAll() { 
      Link current = first; 
      while (current != null) { 
       current.LinkDisplay(); 
       current = current.next; 
      } 
     } 
// delete method is called 

     public int deleteFirst() // delete first item 
     { 
    // (assumes list not empty) 
      Link current = header; // save reference to link 
      header = header.next; // delete it: first-->old next 
      return current.data; `enter code here`// return deleted link 
     } 

    } 

Это программа списка ссылок. Я запускаю этот код несколько раз, но он дает исключение в строках 45 и 74. Код работает хорошо, кроме метода удаления. Вероятно, есть две ошибки; 1-й по вызову метода удаления и второй, когда он удаляет узел.Как запустить эту программу списка ссылок?

Просьба указать, что это за ошибки и почему они происходят.


Вот результат:

 
debug: 
Enter data 
100 
Enter data 
45 
Enter data 
10 
Data: 100 
Exception in thread "main" java.lang.NullPointerException 
    at uni.LinkedList.deleteFirst(Link.java:74) 
    at uni.Link.main(Link.java:45) 
Java Result: 1 
+0

могли бы вы опубликовать точные ошибки что вы получаете? – quixotrykd

+0

, когда вы вызываете header.next, заголовок равен null, поэтому он дает nullpointerexception – quixotrykd

ответ

1

Ваш список может содержать только один header узел, вы должны проверить его при удалении узла:

public int deleteFirst() { 
    if (header == null) 
     return -1;  // <- -1 indicates that list is empty, but it is better to throw RuntimeException here 
    Link current = header; 
    header = header.next == null ? null : header.next; // <- check if header.next exists 
    return current.data; 
} 
+0

"header = header.next == null? Null: header.next; // <- проверить, существует ли файл header.next", можете ли вы пожалуйста, объясните мне точное значение этой строки – Iony

+0

@ ZainFarooq это называется тернарным оператором. 'A = условие? B: C' является ярлыком для 'if (condition) {A = B;} else {A = C;}'. Здесь условие «header.next == null» –

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