1

私は非常に基本的な疑問を持っています。構造を使用してリンクリストを作成しました。これが削除コードです。

void delete(int num)
{
struct node* temp=head;
struct node* prev=head;
if(temp == NULL)
printf("List Empty\n");
else
{
while(temp != NULL)
{
    if(temp->value == num)
    {
            prev=temp->next;
            free(temp);     
            break;
    }
    else
    {       
            prev=temp;
            temp=temp->next;        

    }
}

このコードを実行した後、ノードは削除されません。free(temp)の後にtemp-> valueを出力すると、値は0になります。しかし、そうではないはずです。フリーはノードをワイプする必要があります。だから私は0がどこから現れるのか分かりません。このコードの何が問題になっているのでしょうか。

私のショー機能:

void show()
{
struct node *temp = head;
while(temp != NULL)
{
printf("----  %d  ---- ", temp->value);
temp=temp->next;
}
printf("\n\n");
}

私の構造:

struct node
{
int value;
int pos;
struct node* next;
};

ありがとう。

4

1 に答える 1

2

でノードを見つけたときdelete

if(temp->value == num)
{
        prev=temp->next;
        free(temp);     
        break;
}

実際には、前のノードの次のポインタがノードの次のリンクを指すようにすることはありません。

代わりに、例えば

prev->next = temp->next;
于 2013-02-16T19:51:04.133 に答える