私はデータ構造の初心者です。リンクリストの先頭に新しいノードを挿入しようとしました。しかし、ノードはまったく挿入されていません。問題は最初の挿入でのみ発生します。私を助けてくださいここに私のコードがあります
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
変数に直接割り当てる必要があります。
ユースケースに応じて、3つの解決策があります。
insertBegin
を変更し、display
非静的にします。head
がクラスの変数にアクセスできるようになったため、メソッドの最初のパラメーターを削除しますstatic
head
がクラスの変数にアクセスできるようになったため、メソッドの最初のパラメーターを削除しますhead
変数の動作を変更します。実際のデータを保存することはなく、代わりに実際のヘッド(データを含む)をnextNode
変数として保存します。display
今は常にから始まる head.nextValue
insertBegin
これで、実際のヘッド変数を上書きする必要がなくなりました。nextNode
変数を新しいヘッドに設定するだけです必要に応じて、そのようなケースの1つの例を示します。私はそれらをすべて書き留めて、自分で何かを理解させたくありませんでした。
Javaスキルを向上させたい場合は、変数とメソッド(private、protected、public、default)のさまざまな可視性オプションを調べることもお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加