2012-04-13 18 views
-1

は、私がリンクリストのノードクラスを持っていると言うポインタ変数へのポインタを返す関数?

class node { 
    private: 
     node *next_node; 
    public: 
     node *next() const; 
}; 

node *node::next() const { 
    return next_node; 
} 

い次の()ノードを返す** next_nodeまたはノード* next_node。また、リストクラスの関数(つまり、挿入、削除、検索)を実装する際の重要性は何ですか?

next_nodeがすでにポインタであり、関数内でポインタをポインタとして使用しているため、next_nodeが返されていると考えられる理由はnext_nodeです。私はLinked list head double pointer passingのような他の質問を読んで、リスト操作でもダブルポインターが動作するので、ちょっと混乱しました。

+5

私はあなたがあなたの宿題をすることを示唆している自分が –

+4

あなたはあなた自身の言葉で、あなたは、これは 'ノード**'を返すかもしれないと思う理由を、説明できますか? –

+0

申し訳ありませんが、私は数ヶ月間学校に通っていません。私はプログラミングのスキルを磨きたいと思っていました。ポインタは私の弱点の1つです。私はこの質問が宿題の質問として出ることができるかどうかを理解しています。 – rcell

答えて

0

実装されているnode::next()関数は、next_nodeメンバ変数のコピーを返しています。 next_nodeとこのコピーは同じnodeインスタンスを指しますが、それ以外は互いに独立しています。ここで

は、宣言は、それがタイプnode*で、次のノードへのポインタを返し、言うように彼らの関係

 
next_node ----> [node instance] 
       ^
the copy ------/ 
+0

関数が次のように実装されている場合の相違点は何ですか。 node node :: next()const { return next_node; } これは単に値によってnext_nodeを返し、次のようになります: node * node :: next()const { return&next_node; } – rcell

+0

@rcell実際にはコンパイルされません。あなたは 'node node :: next()const {return * next_node;}を書く必要があります。 } '。これは 'next_node'値の浅いコピーを返します。 – JaredPar

+0

'return * next_node;は' * node :: next'と同じだったと思います。私の理解によって、後者はディープコピーと呼ばれるものを返すのですか? – rcell

0

を証明しようとするいくつかのかなり悪いASCIIアートです。

これはリストを進めるために使用されます。例えば:

for (node * n = list.head(); n; n = n->next()) { 
    // Process node n 
} 
関連する問題