2017-01-23 17 views
-1

私はデータ構造の初心者です。リンクされたリストの先頭に新しいノードを挿入しようとしました。しかし、ノードはまったく挿入されていません。この問題は最初の挿入時にのみ発生します。 ここ 私を助けてください私のコードは、事前リンクリストの先頭に挿入

+0

ホイールを作り直しているので(英語でもこれが英語であるのかどうかわかりません)、これは宿題だと思います。だから少なくとも、そのコードで何が起こっているのかを説明する必要があります。 PS:ようこそ、あなたは正しく挿入されていないと言いますが、何が問題なのかは言わないでください。[ask] – AxelH

+0

より具体的には、投稿を更新してください。 – Aaron

+1

Tomは混乱を避け、同じ名前のクラスとインスタンスを持っているので、 'singlylinkedlist link'の' link'の名前を変更します。 –

答えて

1

まずにおける

public class singlylinkedlist { 
link head; 
static class link 
{ 
    int data; 
    link nextNode; 
    link(int dat) 
    { 
     data=dat; 
     nextNode=null; 
    } 
} 
public static void insertbegin(link head,int x) 
{ 
    link newnode=new link(x); 
    newnode.nextNode=head; 
    head=newnode; 
} 
static void display(link head) 
{ 
    if(head==null) System.out.println("empty list"); 
    else 
    { 
     link temp=head; 
     while(temp!=null) 
     { 
      System.out.println(temp.data); 
      temp=temp.nextNode; 
     } 
    } 
} 
public static void main(String args[]) 
{ 
    singlylinkedlist link=new singlylinkedlist(); 
    link.head=new link(2); 
    insertbegin(link.head,1); 
    display(link.head); 
    } 
} 

おかげで、私は強くあなたのクラスの名前を変更することができアドバイスでしょう。 Javaクラスは常に大文字(アッパーラクテルケース)で始める必要があります。また、変数とメソッドは、常により低いラクダケースでなければなりません(例外:静的最終変数は多くの場合、すべて大文字です)。あなたの質問に今

:あなたはメソッドに渡されるhead変数に新しい値を割り当てた場合、その変更のみ(メソッドに渡される変数headに影響を与え、あなたのメソッド内:あなたのエラーは、以下にありメソッドスコープ内でのみ)。実際のhead変数を変更する場合は、変数headに直接新しい値を割り当てる必要があります。

  1. あなたはLinkedListの実装の複数のインスタンスが必要です:メソッドinsertBegindisplayは非静的であることを
    • 変更を

      あなたのユースケースに応じて、3つのソリューションがあります。

      • :彼らは今、あなただけのLinkedListの実装の1つのインスタンス(ない本当に良い解決策)が必要
    • クラスの変数headにアクセスできるよう
    • は、メソッドの最初のパラメータを削除します彼らは今、クラスの変数headにアクセスできるようstatic
    • は、メソッドの最初のパラメータを削除し、クラス内のあなたの頭の変数を作成します
  2. あなたが(何らかの理由で)変数/メソッドの静的/非静的パターン保存しておきたい:
    • 変更をhead変数の振る舞い:それは今、実際のデータを格納することはありませんが、代わりに実際に保存します頭(データ付き)はnextNodeという変数になります。
    • displayは今、常にhead.nextValue
    • insertBeginから始まるが、今実際のヘッド変数を上書きする必要はありません読み込みます。それだけであなたがしたい場合、私はそれらの例1のためにあなたの例を与えることができ、新しいヘッドに

をそのnextNode変数を設定する必要があります。私はちょうどそれらすべてを書き留めて、あなた自身のものを把握させたくありませんでした。


あなたのJavaのスキルを向上させたい場合は、私はまた、あなたが様々な可視性(プライベート、保護、公共、デフォルト)変数やメソッドのオプションを検討することをお勧め

0

あなたのコードはたくさん持っていますエラーのこれはリンクされたリストを書く方法ではありません。 @MichaelRitterの答えを参照して修正してください。

singlylinkedlistクラス非静的ですべての機能を確認しsinglylinkedlistクラス外linkクラスを移動し、singlylinkedlistクラス外の別のクラスでmain()メソッドを記述します。

あなたのinsertbegin()メソッドに関する限り、まず非静的にする必要があります。また、最初に挿入する関数のパラメータの整数値のみを受け入れる必要があります。リンクされたリストの先頭ノードを取ることはここでは役に立たない。さらに、リンクされたリストのヘッドノードが何かをする前にnullであるかどうかをチェックする必要があります。そうしないと、NullPointerExceptionが返されます。

public void insertbegin(int x){ 
    link temp = new link(x); 
    if(head == null) 
     head = temp; 
    else{ 
     link ts = head; 
     head = temp; 
     head.nextNode = ts; 
    } 
} 

あなたはlinkと呼ばれるsinglylinkedlistの初めに1を挿入したい場合は、あなたにinsertbegin()関数を呼び出すことができます。ここでは

singlylinkedlistクラスの insertbegin()メソッドの作業バージョンです
link.insertbegin(1); 

私はこれが役立つことを願っています。

+0

内部クラスは実際には問題ありません。私はそれをプライベートthoにする(linkedlistクラスの外側のno1はノードを見ることができるはずです) –

関連する問題