2016-05-03 20 views
-1

私はC++で新しくリンクリストを学習しています。しかし、私はいくつかの問題に遭遇しました。通常の場合、我々はリンクリストを定義するときに、ここではノード構造であるためにリンクリスト構造のときにダブルポインタ

struct Node{ 

    int data; 

    Node* next; 

}; 

構造はこのようになったときしかし、どのように我々はリンクリストを定義することができます。

struct Node{ 

    int data; 

    Node** next; // Double pointer instead 

}; 

私は二重ポインタと全く混同していますが、 "next"に何を割り当てるべきですか? たとえば、最初にnodeを挿入するときに、headの値をnewPtr->nextに代入すると:

newPtr->next = &head?そうですか?

ありがとうございます。

+0

あなたはそれを試してみませんか?リンクされたリストを行う方法については、サンプルやチュートリアルが多数用意されています。 –

+0

二重ポインタの意味:nextはポインタを含む配列を指しています – Hearner

答えて

0

私はこれについてはわかりませんが、ポインタについて学び始めているので、私の考えを共有したいだけです。私が間違っているなら、私を修正してください。他の人はあなたがポインタへのポインタを作成しているコメントで言ったよう

#include <iostream> 
 

 
int main() 
 
{ 
 
\t int **p = new int*; // Pointer to a pointer. 
 
\t int *q = new int; // Pointer. 
 
\t 
 
\t // Assigning the value of 5 to where q points to. 
 
\t // The "*" is used as a dereference operator 
 
\t // meaning that it assigns 5 to where q is pointing to. 
 
\t *q=5; 
 
\t 
 
\t // Here you are pointing p to point to q. 
 
\t // That is why it is called a pointer to a pointer. 
 
\t // The "*" here is used as pointer to point to another pointer. 
 
\t *p=q; 
 

 
\t // Then here you can access the value of the p by dereferencing 
 
\t // it twice. 
 
\t 
 
\t std::cout << **p << std::endl; 
 
\t 
 
\t // Outputs 5. 
 
\t 
 
\t return 0; 
 
}

。 int * pはデータを直接指すことができ、int ** qは別のポインタを指すことができることを意味します。この場合は* pです。 *の数は、あなたがどれだけ深く進むかを示します。

struct Node 
 
{ 
 
    int data; 
 
    Node *next, *prev; 
 
}

また二重にリンクされたリストと呼ばれている:あなたはあなたのノードが2つのポインタを持つようにしたいと仮定すると、あなたはこのような何かをしなければなりません。前方と後方を横切ることができる場所。

関連する問題