2012-01-04 7 views
0

私はいくつかのノードを持つリストを持っています。私は最後のノードをcurrent->nextの値をNULLと宣言してマークしようとしています。NULLへの* nextリストポインタを設定する

私のcurrentが最終ノードを指しているとします。次の2つのコードスニペットは異なる方法で動作しますか?はいの場合、どのように動作しますか?

current->next = NULL; 

current = current->next; 
current = NULL; 

私は今、しばらくの間、これらの実験をされていますが、私は本当にそこに何が起こっているのか理解できません。私は彼らが同じことをしていると言います.2番目のものは最初に私のcurrentを指し、nextを指し、それをNULLに設定します。

EDIT:ああ、私は答えが何を言っているのか理解しています。だから私が最初の方法を使用しない場合は、current = current->nextのために行くことを選択する方法は、私がするべきNULL値を置くための方法はありますか?新しいcurrentを使用して、私の古いnextが指していた場所を指摘するにはどうすればよいですか?

+0

ものは全く異なるものです。おそらく良い本のための時間? –

+0

これは明らかに有効なステートメントです。最初は 'current'で指定されたノードの' next'フィールドをnullに設定します。 2番目の文のペアは 'current'を' current'で指定されたノードに格納された 'next'の値に設定し、' current'に置いた値をnullで上書きします。 (私はポインタが何であるかの概念をかなり得ていません) –

+0

ポインタに関しては、私は絶望的です。私はかなり簡単なチュートリアルを読んできました。intやcharsへの簡単なポインタを扱っていれば自分の道を見つけることができると思いますが、ちょっと複雑になったらすぐに失われてしまいます... –

答えて

2

前のスニペットは、currentが指す構造体のnextフィールドをNULLに割り当てます。 2番目のスニペットは、ポインターをcurrentが指す構造体のnextフィールドに設定し、currentNULLに設定します。

構造体への参照を取得するための他の方法がない限り、2番目の方法の有用性は分かりません。後者の場合

current -> struct 
      next -> NULL 

:前者の場合はそう

current -> NULL 

      struct 
      next -> ???? 
+0

ご返信ありがとうございます。それはかなり簡単です。私はそれが別のポインタに固定されているので、構造体を失うことはありません。私は私の質問を更新しました。 current = current-> nextを実行した後、currentを使用してNULLの次の値に切り替えることは可能ですか? –

+0

確かに、あなたが望むとは思わない 'current-> next-> next = NULL'と同等です。おそらく、 'next 'を保持するポインタと' current'を指すポインタの2つのポインタを使用しなければならないので、現在の 'next'を' NULL'に変更することができます。 –

+0

ありがとうございます。私は2番目の変数を使い、私が望むことをすることができました。 –

2

はい、それらは異なっており、最初のバージョンです。第二に

、あなただけの最後のノードのnextポインタが同じままながら(それはおそらく最初の場所でNULLに初期化されなければならない、(NULLに)ローカル変数currentの値を変更しているが、多分それはあなたがやっていることです)。

+0

ご返信ありがとうございます。私は今、2番目の部分の問題を非常にはっきりと見ることができます。だから私は少し質問を更新した。私はあなたがそれをすばやく見ることができることを願っています。 –

+0

私があなたの編集を理解しているならば、 'next'の古い値を' NULL 'に設定して(つまりリストを2つに分割して)保存したいとします。基本的にこれを行うには別の変数が必要です。 'next = current-> nextのようなものです。 current-> next = NULL; current = next; '(スワッピングの想い出) –

+0

ありがとうございました。 2番目の変数はトリックでした。私はロバートの答えを受け入れるだろう。なぜなら、彼は以前よりずっと早かったからだ。 –

関連する問題