2016-11-15 3 views
0

私の整数の配列に1つのリンクされたリストを作成する必要がありますが、現在私のコードで現在何が間違っているのか分かりません。アレイから単独でリンクされたリストを作成できないのはなぜですか?

これはノードを作成するためのコードです。 (データ)

package sllset; 

class SLLNode { 
    int value; 
    SLLNode next; 

public SLLNode(int i, SLLNode n){ 
    value = i; 
    next = n 
    } 
} 

私のメソッドとコンストラクタを持つ他のクラスは、このようになります。

package sllset; 


public class SLLSet { 
    private int setSize; 
    private SLLNode head; 

public SLLSet(){ 
    head = null; 
    setSize = 0; 
} 

public SLLSet(int[] sortedArray){ //second constructor 
    setSize = sortedArray.length; 
    int i; 
    head=null; 
    for(i=0;i<setSize;i++){ 
     head.next = head; 
     head = new SLLNode(sortedArray[i],head.next);  
    } 
} 


public String toString(){ 
    SLLNode p; 
    String result = new String(); 
    for(p=head ; p!=null ; p=p.next) 
     result += p.value; 
    return result; 
} 

public static void main(String[] args) { 
int[] A = {2,3,6,8,9}; 
SLLSet a = new SLLSet(A); 
System.out.println(a.toString()); 

    } 

} 

私の問題は、私の2番目のコンストラクタが動作しないということです。私は実際には理由を知りません。私は、これらの機能の大部分をどのように行うかについてのガイドに従ってきたので、私が推測するコードの知識は問題を解読するのに十分ではありません。

EDIT:誰かが19行目でNULLPointerExceptionを取得する問題を指定するように指示しました。ここで私はhead.next = head; 。しかし、とき 私がテストするために、その部分を削除し、ライン20は、エラーメッセージを取得します

+0

これは動作しません。どうして知っていますか? – shmosel

+0

私はそれを実行しようとしました – joeymed

+0

@shmosel非常に面白い –

答えて

1

はあなたのコンストラクタは、いくつかの問題を抱えているのは、この

head=null;  // you are setting head to null 
for(i=0;i<setSize;i++){ 
    head.next = head; // see two lines up, head is null, it can not have next 

を見てみましょう。このバージョンをお試しください:

public SLLSet(int[] sortedArray){ //second constructor 
    head = null; 
    if (sortedArray == null || sortedArray.length == 0) { 
     setSize = 0; 
    } 
    setSize = sortedArray.length; 
    head = new SLLNode(sortedArray[0], null); 
    SLLNode curr = head; 

    for (int i=1; i < setSize; ++i) { 
     curr.next = new SLLNode(sortedArray[i], null); 
     curr = curr.next; 
    } 
} 
+0

コードは、ループの前にそのことを意味しません。my head = null(ヌル以外のリストには何もありません)。その後、整数でループを開始すると、値nullが右側に移動しますか? OHHか、それとも私の次の頭部(頭部はリストの始まりを意味するのですか?)基本的に次の値が再びヌルであると言っていますか? – joeymed

+0

はい、新しいノードをそれぞれ作成するとき、次の値はデフォルトでは「null」です。これはリンクされたリストがどのように動作するか、どこかで終了する必要があります。コードを試して、コメントとともにここに戻ってきてください。 –

+0

私は与えられたコードを試しましたが、エラーがあるようです:互換性のないソースコード - 誤ったsym型:sllset.SLLSet.SLLNode。 curr.next = SLLNode(sortedArray [i]、null)です。編集:気にしない、私はそれの前に新しい追加することによってそれを修正しました。それを修正したようだ – joeymed

関連する問題