void removeDuplicateWithHashtable(LinkedListElement<char> *head)
{
LinkedListElement<char> *runner = head;
LinkedListElement<char> *previous = nullptr;
hash_map<char, bool> record;
while (runner) {
if (record.count(runner->Data) == 0) {
pair<char, bool> item(runner->Data,true);
record.insert(item);
}else
{
free(runner);
previous->Next = runner->Next;
}
previous=runner;
runner=runner->Next;
}
}
最初はエラーになるかと思いました。ではfree(runner)
、メモリを解放すると、runner->Next にアクセスできなくなるためです。しかし、GCC コンパイラは正常に実行されました。
実際に無料でランナーを削除するように変更すれば、それも正しいです。理由を聞いてもよろしいですか? 空きまたは削除の可能性があります。メモリが使用可能であり、実際には内部のデータが消去されていないため、[次へ] にアクセスすることもできます。また、それを改善する方法を尋ねることはできますか?