2016-07-14 16 views
0

このプログラムでは、なぜ変更ヘッドラインに* head = * head-> nextを使用できないのですか?C++のポインタへのポインタ

これは...

geeksforgeekアルゴリズムであり、またはポインタあなたが*head_ref = *head_ref->nextを使用することができます

void deleteNode(struct node **head_ref, int key) 
{ 
    // Store head node 
    struct node* temp = *head_ref, *prev; 

    // If head node itself holds the key to be deleted 
    if (temp != NULL && temp->data == key) 
    { 
     *head_ref = temp->next; // Changed head 
     free(temp);    // free old head 
     return; 
    } 

    // Search for the key to be deleted, keep track of the 
    // previous node as we need to change 'prev->next' 
    while (temp != NULL && temp->data != key) 
    { 
     prev = temp; 
     temp = temp->next; 
    } 

    // If key was not present in linked list 
    if (temp == NULL) return; 

    // Unlink the node from linked list 
    prev->next = temp->next; 

    free(temp); // Free memory 
} 
+0

私は '* head = * head-> next'がうまくいくと思いますが、試しましたか?しかし、tempは他の目的にも役立ちます。 – keyser

答えて

0

を学ぶために私にいくつかの良いチュートリアルを提案してください。

しかし、これは、物事を明確にするためにtempを使用して行われます。 temp->dataを使用して比較し、*head_refを使用して削除すると、あまり目立たないでしょう。

*head_refを使用する場合は、コードを変更してより明瞭に見えるようにすることができます。 like、

// If head node itself holds the key to be deleted 
if (*head_ref != NULL && *head_ref->data == key) 
{ 
    *head_ref = *head_ref->next; // Changed head 
    free(temp);     // free old head 
    return; 
} 
+0

これはうまくいかないでしょうが、私は解決策(*頭) - >次に考え出しました。ブラケットなしでは動作しません –

関連する問題