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 编译器运行成功。
实际上,如果我更改为免费删除跑步者,那也是正确的。请问原因可能是空闲还是删除,只是告诉你内存可用,里面没有实际清除数据,所以你也可以访问Next。我能问一下如何改进吗?