【发布时间】:2014-02-25 00:08:30
【问题描述】:
以下是删除链表中重复元素的功能
void deleteDup(Node *head)
{
Node *ptr1, *ptr2, *prev;
for (ptr1 = head; ptr1 != NULL; ptr1 = ptr1->next){
prev = ptr1;
for (ptr2 = ptr1->next; ptr2 != NULL; prev = ptr2, ptr2 = ptr2->next){
if (ptr1->value == ptr2->value){
prev->next = ptr2->next;
free(ptr2); // Question 1
}
}
}
}
问题 1: 以上代码适用于 (1->1->2->3->1)。但是写完之后,我自己也糊涂了。
困惑:当它释放 ptr2 时,它是如何在循环中向前移动的?释放 ptr2 后,prev = ptr2, ptr2 = ptr2->next 不应该出现 seg 错误吗?
问题 2: 这段代码可以优化吗? (即节省资源或提高性能)
【问题讨论】:
-
@Jonathon 一般问题:我们如何在提问时快速格式化代码。我总是被 > 或 4 个空格方法卡住
-
选择代码并点击
{ }按钮。我也手动修复了一些缩进。
标签: c linked-list free