2016-02-28 65 views
-2

節點的內容我有一個編程的挑戰是遞歸的多個數據在列表中的以下的節點。例如多鏈表

2 - 4 - 6 - 8

384 - 192位48 - 8

這是我迄今所做在空隙產品的方法。我不斷收到一個空指針異常。有什麼不對我的產品的方法

class Node 
     { 
     private int data; 
     private Node next; 
     private Node prev; 
     public Node(int newData,Node newNext,Node newPrev) 
     { 
      data = newData; 
      next = newNext; 
      prev = newPrev; 
     } 
     public int getData() 
     { 
      return data; 
     } 

     public void setData(int otherData) 
     { 
      this.data = otherData; 
     } 
     public Node getNext() 
     { 
      return next; 
     } 
     public Node getPrev() 
     { return prev; 
     } 
     public void setNext(Node newNext) 
     { 
      next = newNext; 
     } 
     public void setPrev(Node newPrev) 
     { 
      prev = newPrev; 
     } 
     } 


    class LinkedList 
     { 
     private Node head; 
     private Node start; 
     private Node end; 
     public LinkedList() 
     { 
      head = null; 
      start = null; 
      end = null; 
     } 

     public void insert(int data) 
     { 
      Node newNode = new Node(data,null,null); 

      if(start == null) 
      { 
      start = newNode; 
      end = start; 
      } 
      else 
      { 
      newNode.setPrev(end); 
      end.setNext(newNode); 
      end = newNode; 
      } 
     } 

     public void product() 
     { 
      product(head); 
     } 
     public void product(Node head) 
     { 
      Node next = head.getNext(); 
      if(head == null) 
      { 
      return; 
      } 
      else 
      { 
      int data = head.getData() * next.getData(); 
      head.setData(data); 
      product(head.getNext()); 
      } 
     } 
     } 
+0

不應該'96'是'192'(在4 * 6 * 8)? – radoh

+1

Yeap。感謝您的更正 –

+0

還有另一個NullPointerException問題。 – Raedwald

回答

1

要調用head.getNext()next.getData()而不檢查,如果任一headnext爲空,所以在處理最後一個節點時,程序會崩潰。即便如此,你只是連續增加兩個項目,而沒有積累產品。

您可以使用函數的返回值的積累正確答案:

public void product() 
    { 
     product(head); 
    } 
    public int product(Node head) 
    { 
     if(head == null) 
     { 
     return 1; 
     } 
     else 
     { 
     int data = head.getData() * product(head.getNext()); 
     head.setData(data); 
     return data; 
     } 
    } 
0

我沒有檢查邏輯整個代碼,但是,想到的第一件事是,你分配:

Node next = head.getNext();

然後你檢查if(head == null)而是if(next == null)什麼?
如果是的話,你有你的錯誤就在這裏:

next.getData()

因爲head可以是非null,但其next可以肯定null


正確行動方針是首先檢查if(head == null),然後分配Node next = head.getNext();,並然後檢查if(next == null)

0

首先,你叫getNext()方法上head然後你是否headnull?這顯然是錯誤的。

您應該首先檢查head是否爲null。然後,你應該檢查一下nextnull

此外,我不認爲您的遞歸將正確計算產品,因爲您將current頭中的數據與next中的當前數據相乘 - 您可以通過簡單的循環實現該功能。

相反,你應該叫product(next)第一和計算產品。像這樣(沒有雖然測試)

public void product(Node head) 
{ 
    if (head == null) 
    return; 
    Node next = head.getNext(); 
    product(next); 
    if (next != null) 
    { 
    int data = head.getData() * next.getData(); 
    head.setData(data); 
    } 
}