問題がどこにあるのかわかりません。C - 単一リンクリストから要素を削除する
そして、del関数が期待どおりに機能しないのはなぜですか?これを実行した後
#include<stdio.h>
#include<malloc.h>
typedef struct list List;
struct list
{
int data;
List* next;
};
void prl(List* head);
void ins(List** head, int value);
void del(List** head, int value);
int main()
{
List* head = NULL;
ins(&head, 10);
ins(&head, 50);
ins(&head, 20);
ins(&head, 150);
ins(&head, 120);
del(&head, 150);
prl(head);
//freeing dynamically allocated memory for each nodes
while(head!=NULL)
{
List* t = head;
head = head->next;
free(t);
}
return 0;
}
void prl(List* head)
{
if(head == NULL)
printf("List is empty\n");
else
{
while(head != NULL)
{
printf("%d ", head->data);
head = head->next;
}
}
}
void ins(List** head, int value)
{
List* node = malloc(sizeof *node);
node->data = value;
node->next = NULL;
node->next =*head;
*head = node;
}
void del(List** head, int value)
{
List* p,*q;
p=q=*head;
if((*head)->data == value)
{
*head = (*head)->next;
free(p);
return;
}
else
{
while(p->next != NULL)
{
if(p->data == value)
{
q->next = p->next;
free(p);
}
else
{
q = p;
p = p->next;
}
} // while loop ends
} // outer else ends
} // del function ends
、出力は空白で、私は何か(論理的には)デル機能アウター他のループ内で間違っていると思います、しかし、最初の値は、この機能を使用して削除することができます。
デバッガでコードを実行しようとしましたか? –
以前にデバッガを使用していないのなら、今は完璧な時です。デバッガを使用すると、変数とその値を監視しながら、行ごとにコードをステップ実行できます。もちろん、関数が呼び出されるときに関数に入ることもできます。このような問題が発生した場合は、まずデバッガを使用して問題を把握してください。 –
'del'関数は、リストの先頭にある値のコピーを1つだけ削除するのはなぜですか?しかし、それがリストの先頭に現れなければ、リスト全体を反復し、その値のすべてのコピーを削除しようとしますか? – Kaz