私はデータ構造を練習しており、単リンクのリストを作成し、リストに追加してリストを削除するコードを実装しました。私は本当に私の削除リスト機能が実際に何をすべきかをしているかどうかを知りたいと思う。私はそれがクラッシュする削除の後にリストを印刷しようとすると、それはだと思う。それで、自分のリストを削除していることを保証するためのアドバイスや、自分のコードを改善するためのアドバイスがあります。動的にメモリを割り当てることになると、私はまだまだ新人です。単独リンクされたリストのリストを削除する
typedef struct node {
int data;
node* next;
}* nodePtr;
nodePtr addToList(nodePtr head, int data) {
nodePtr newItem = new node; //create a new item
newItem->data = data; //assign the data to the new item
newItem->next = head; //point to head
return newItem; //return the new head
}
void deleteList(nodePtr head) {
if (head == nullptr) {
return;
}
else {
deleteList(head->next);
delete head;
head = nullptr;
}
}
void Print(nodePtr n) {
while (n != nullptr) {
cout << n->data << " ";
n = n->next;
}
}
int main() {
nodePtr head = new node;
nodePtr second = new node;
nodePtr third = new node;
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = nullptr;
Print(head);
cout << endl;
head = addToList(head, 0);
Print(head);
cout << endl;
deleteList(head);
return 0;
}
問題を見つけて修正するために、デバッガを使用してコードを1行ずつ進めることをお勧めします。 – user0042
あなたのaddToListは、それがするべきことをしていません。 addToList関数を呼び出さずにdeleteを呼び出してそこから修正してみてください。あなたのメインでは、リストを手動で作成するのではなく、addToListを使用していません。 –
あなたが割り当てたものを正しく整理しているかどうかを判断するには、valgrindのようなツールを試すことができます。 – aschepler