で実装リンクされたリストの中に二重のポインタに対して単一の使用:私はリンクリストの末尾に要素を追加するために、このコードを書いていたC
struct node{
int info;
struct node* link;
};
void append (struct node **q, int num)
{
struct node *temp, *r ;
if (*q == NULL) // if the list is empty, create first node
{
temp = (struct node*) malloc (sizeof (struct node)) ;
temp -> info = num ;
temp -> link = NULL ;
*q = temp ;
}
else{
temp = *q ;
/* go to last node */
while (temp -> link != NULL)
temp = temp -> link ;
/* add node at the end */
r = (struct node *)malloc (sizeof (struct node)) ;
r -> info = num ;
r -> link = NULL ;
temp -> link = r ;
}
}
と私はこのような機能を追加呼び出す:list
がある append(&list, 10);
リンクリストへのポインタ
このコードは機能しますが、単一ポインタを追加機能(** qの代わりに* qを使用)で使用し、それに応じて変更しますそれは動作しません。そのため第二の例では?:
void append (struct node *q, int num)
{
struct node *temp, *r ;
if (q == NULL) // if the list is empty, create first node
{
temp = (struct node*) malloc (sizeof (struct node)) ;
temp -> info = num ;
temp -> link = NULL ;
q = temp ;
}
else{
temp = q ;
/* go to last node */
while (temp -> link != NULL)
temp = temp -> link ;
/* add node at the end */
r = (struct node *)malloc (sizeof (struct node)) ;
r -> info = num ;
r -> link = NULL ;
temp -> link = r ;
}
}
なぜこれはC++とタグ付けされていますか? – iammilind
CとC++は密接に関連しているので、私はC++の知識を持つ人が私をここで助けてくれるかもしれないと仮定していました。 – Jatin
ちなみに、これは、ランタイムが要素の数に比例して増加するため、要素をリストに追加する悪い方法です。従来のアプローチでは、リストの両端へのポインターを維持することで、一定時間内に追加を行うことができます。 –