谷歌面试题:如何从无序链表中移除重复项?
一位小伙伴来问一道谷歌的笔试题,关于单链表操作的,问到底有多少种解决方案,今天我们就来聊聊。 题目的大致意思是: 假设存在一个无序单链表,将重复结点去除后,并保原顺序。去重前:1→3→1→5→5→7去重后:1→3→5→7 顺序删除 通过双重循环直接在链表上执行删除操作。外层循环用一个指针从第一个结点开始遍历整个链表,然后内层循环用另外一个指针遍历其余结点,将与外层循环遍历到的指针所指结点的数据域相同的结点删除,如下图所示。 假设外层循环从outerCur开始遍历,当内层循环指针innerCur遍历到上图实线所示的位置(outerCur.data==innerCur.data)时,此时需要把innerCur指向的结点删除。 具体步骤如下: 用tmp记录待删除的结点的地址。 为了能够在删除tmp结点后继续遍历链表中其余的结点,使innerCur指针指向它的后继结点:innerCur=innerCur.next。 从链表中删除tmp结点。 实现代码如下: 运行结果: 算法性能分析 由于这种方法采用双重循环对链表进行遍历,因此,时间复杂度为O(N^2)。其中,N为链表的长度。在遍历链表的过程中...

