2016-04-14 14 views
-3

リスト内の指定された位置からノードを削除したい場合は、 の削除機能が動作していません。 私を助けてください。リンクリスト内の指定された位置からノードを削除

ありがとうございます。

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node* temp, *temp1, *temp2; 
    temp = head ; 
if(head==NULL){ 
    return 0; 
    } 
else if(position == 0) 
    { 

    head = head->next; 
    free(temp); 
    return head; 
} 
    else{ 
     while(count!= position-1) 
     { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    return temp; 
} 

return head; 
} 
+0

*どのように動作していませんか?ビルドエラーが出ますか?クラッシュ?あなたはデバッガで実行しようとしましたか?コードを1行ずつ進んで、どこが間違っているかを確認します。 –

+0

希望する動作を定義してください。戻り値は何であるべきですか? – MikeCAT

+2

私の推測: 'return temp;'は削除する必要があります。 – MikeCAT

答えて

1

return head;return temp;を交換も少ない位置よりもノードがある場合に処理するためのロジックを含みます。

3

まず、コードを適切にフォーマットします。

次に、リストの前の部分が失われないようにreturn temp;を削除します。

最初にreturn head;を削除することもできます。これは、最後の部分にはreturn head;と表示されるためです。 return 0;0がNULLポインタ定数(N1256 6.3.2.3ポインタ)であるとポインタに変換が定義されているため有効であるが、それはそれを明確にそれが扱っていることになりますので、NULLを使用して優れていることを

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node *temp, *temp1, *temp2; 
    temp = head; 
    if(head==NULL){ 
    return NULL; 
    } 
    else if(position == 0) 
    { 
    head = head->next; 
    free(temp); 
    } 
    else{ 
    while(count!= position-1) 
    { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    } 

    return head; 
} 

注意ポインタで。

1

私はMikeCATの答えに追加したいと思います。また、ノードの数が位置よりも小さい場合は、条件を処理する必要があります。

これを行う方法の一つは次のようになります。

while(count!= position-1) { temp = temp->next; if(temp == NULL) return head; count++; }

0

return tempを削除し、return headを書きます。 さらに、位置がリンクリストのノード数よりも大きい場合は、条件をチェックします。 また、ポインタを解放する前に、temp1->next=NULLを追加してからfree(temp1)を追加することをお勧めします。

関連する問題