C++程序 从未排序的链表中删除重复项
编写一个removeDuplicates()函数,它接受一个链表并从链表中删除任何重复的节点。该链表未排序。
例如,如果链接列表是12- > 11- > 12- > 21- > 41- > 43- > 21,那么removeDuplicates()应将该列表转换为12- > 11- > 21- > 41- > 43。
方法1(两个循环):
这是使用两个循环的简单方法。外部循环用于逐个挑选元素,内部循环用于将挑选的元素与其余元素进行比较。
感谢Gaurav Saxena在编写此代码时的帮助。
输出:
时间复杂度:O(n ^ 2)
辅助空间:O(1)
方法2(使用排序):
一般来说,归并排序是最适合高效地对链表进行排序的排序算法。
1)使用Merge Sort对元素进行排序。我们将很快编写一篇有关对链接列表进行排序的文章。O(nLogn)
2)使用用于在排序的链接列表中删除重复项的算法在线性时间内删除重复项。O(n)
请注意,此方法不保留元素的原始顺序。
时间复杂度: O(nLogn)
方法3(使用哈希):
我们从头到尾遍历链表。对于每个新遇到的元素,我们检查它是否在哈希表中:如果是,则移除它;否则将它放入哈希表中。
输出:
时间复杂度: 平均为O(n)(假设哈希表访问时间平均为O(1))。