2017-01-09 3 views
1

私はこのコードを持っています。構文的には正しいですが、正面からノードを削除しようとしているときは、「リストは空です」と表示されます。 私はそれが間違った値を返しますが、私はなぜ知らないので、私のミスは、isEmpty方法であると信じています。リンクリスト削除

あなたは、なぜ検出するために、私を助けていただけますか?

public class link { 
    public String bookName ; 
    public int millionSold; 

    public link next ; 

    public static void main(String [] args) 
    { 
     linkList linkedlist = new linkList(); 
     linkedlist.insertLink("Head first java", 200); 
     linkedlist.insertLink("Head first design pattern", 400); 
     linkedlist.insertLink("Head first design", 600); 
     linkedlist.display(); 
     System.out.println(linkedlist.isEmpty()); 
     linkedlist.findItem("Abed"); 
    } 

    public void display() 
    { 
     System.out.println(bookName +":"+millionSold+"000.000"); 
    } 

    public link(String bookName,int millionSold) 
    { 
     this.bookName=bookName; 
     this.millionSold=millionSold; 
    } 
    public String toString() 
    { 
     return bookName ; 
    } 
} 

LINKLIST removeLinkfirstLink割り当てる割り当てlinkReference.next= firstLink;

class linkList 
{ 
    public link firstLink ; 

    linkList() 
    { 
     firstLink = null ; 
    } 

    public boolean isEmpty() 
    { 
     boolean empty ; 
     if(firstLink==null) 
     { 
      empty = true ; 
     } 
     else 
     { 
      empty = false ; 
     } 
     return empty; 
    } 

    public void insertLink(String bookName , int millionSold) 
    { 
     link newLink = new link(bookName,millionSold); 

     newLink.next = firstLink; 
     firstLink=newLink ; 
    } 
    public link removeLink() 
    { 
     link linkReference = firstLink ; 
     if(!isEmpty()) 
      linkReference.next= firstLink; 
     else 
      System.out.println("The List is Empty"); 

     return linkReference ; 
    } 

    public void display() 
    { 
     while(firstLink!=null) 
     { 
      firstLink.display(); 
      System.out.println("The Next :"+firstLink.next); 
      firstLink = firstLink.next; 
      System.out.println(); 
     } 
    } 

     public link findItem(String bookName) 
     { 
      if(!isEmpty()) 
      { 
       while(firstLink.bookName != bookName) 
       { 
        if(firstLink.next == null) 
        { 
         return null ; 
        } 
        else 
        { 
         firstLink=firstLink.next; 
        } 
       } 
      } 
      else 
      { 
       System.out.println("Can not find a match"); 
      } 
      return firstLink ; 
     } 
    } 
+0

コード全体をご覧になるには下にスクロールしてください –

+0

私の謙虚な意見ではビジネスの状態を変更していないいくつかの方法では、あなたの 'firstLink'フィールドを変更するということが関係しているでしょうあなたのリスト( 'display'と' findItem') –

答えて

0

Infactはあなたが他の方法でラウンドをしたいlinkReference.nextへ:

は、ここに私のコードです。あなたはfirstLinklinkReference.nextになりたいので、別の観察は、あなたのリスト(あなたの唯一のエントリポイント)へのポインタを変更すると、メソッドを実行するようfirstLinkを使用していないdisplayfindItemであるfirstLink=linkReference.next;

を変更してみてください。あなたのリストをナビゲートする

+0

それは同じ結果を返しましたisEmptyメソッド 間違いはありますが、私はそれを理解できません –

+0

'display'と' findItem'メソッドを更新しましたか?答え? –

+0

上記のように更新されました。 別の質問はここで私は更新されているが、私はこれらの方法のうちにそれを使用するたびにfirstlinkの一時値を使用しなければならないとき、私は を誤解していますか? –

0

使用temp変数(以下cursor)。それ以外の場合は、firstLinkにnullを定義しています。リストが空であるようです。

public void display() 
{ 
    link cursor = firstLink; 
    while(cursor!=null) 
    { 
     cursor.display(); 
     System.out.println("The Next :"+cursor.next); 
     cursor = cursor.next; 
     System.out.println(); 
    } 
} 

、あなたがループしたい場所リストを通じて同じことをやって(例。findItem())は、より良いアプローチとなります。

0

問題は、お使いのディスプレイ()メソッドです。リストを反復した後、のfirstLink変数がnullになります。あなたが好き、ディスプレイ()メソッドでは、単に反復のための一時的な変数を追加する必要があります。

link tempLink = firstLink; 
while (tempLink != null) { 
    tempLink.display(); 
    System.out.println("The Next: " + firstLink.next); 
    tempLink = tempLink.next; 
    System.out.println(); 
} 

使用しますが、リストを反復が、頭を変更したくない他の場所で同じ技術(たとえば、 findItem()メソッド)。

私はまた、Javaのすべてのクラスの名前を大文字に推薦します。 Java命名規則hereの詳細については、こちらをご覧ください。

関連する問題