1. 题目

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:
链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。

进阶:
如果不得使用临时缓冲区,该怎么解决?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 哈希set记录出现过的

  • O(n)空间、时间复杂度
class Solution {public:ListNode* removeDuplicateNodes(ListNode* head) {if(!head || !head->next)return head;unordered_set<int> s;ListNode *prev = head, *cur = head->next;s.insert(head->val);while(cur){if(!s.count(cur->val)){s.insert(cur->val);prev = cur;}elseprev->next = cur->next;cur = cur->next;}return head;}
};

2.2 暴力求解

  • 每个节点往后遍历所有的节点,跟其值相等的删除
  • O(1)空间复杂度,O(n2)时间复杂度
class Solution {public:ListNode* removeDuplicateNodes(ListNode* head) {if(!head || !head->next)return head;ListNode *prev = head, *cur = head->next, *pc=NULL;int v;while(prev){v = prev->val;pc = prev;cur = prev->next;while(cur){if(cur->val != v){pc = cur;}else{pc->next = cur->next;}cur = cur->next;}prev = prev->next;}return head;}
};

程序员面试金典 - 面试题 02.01. 移除重复节点(哈希set)相关推荐

  1. 面试题 02.01. 移除重复节点(链表删除操作模板)

    链表删除操作:(不带头节点的链表,加上虚拟头节点(dummyHead)删除head就不用单独讨论) 增加虚拟头节点和pre指针: 模板: //创建头节点 ListNode *dummyHead=new ...

  2. 程序员面试金典 - 面试题 02.04. 分割链表

    1. 题目 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于" ...

  3. [程序员面试金典][JAVA][第02.01题][移除重复节点][Set][双指针]

    [问题描述][简单] 编写代码,移除未排序链表中的重复节点.保留最开始出现的节点.示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2:输入:[1, 1, 1, 1, 2 ...

  4. 程序员面试金典 - 面试题 05.01. 插入(位运算)

    1. 题目 插入.给定两个32位的整数 N 与 M,以及表示比特位置的 i 与 j. 编写一种方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束. 假定从 j 位到 i 位足 ...

  5. 程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)

    1. 题目 节点间通路.给定有向图,设计一个算法,找出两个节点之间是否存在一条路径. 示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]],st ...

  6. 程序员面试金典 - 面试题 03.01. 三合一(数组栈)

    1. 题目 三合一.描述如何只用一个数组来实现三个栈. 你应该实现push(stackNum, value).pop(stackNum).isEmpty(stackNum).peek(stackNum ...

  7. 程序员面试金典 - 面试题 16.01. 交换数字(位运算swap)

    1. 题目 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值. 示例: 输入: numbers = [1,2] 输出: [2,1]提示: numbers.length ...

  8. 程序员面试金典 - 面试题 02.05. 链表求和

    1. 题目 给定两个用链表表示的整数,每个节点包含一个数位. 这些数位是反向存放的,也就是个位排在链表首部. 编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入:(7 -> 1 -& ...

  9. 程序员面试金典 - 面试题 10.01. 合并排序的数组

    1. 题目 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m 和 n. 示例: 输入: ...

最新文章

  1. Eclipse实现hibernate反向工程:从数据库逆向生成实体类和hbm文件
  2. python3.5连接MySQL
  3. 360不用卸,照样上你QQ
  4. 多线程 调用多线程的方法 Runtime与ProcessBuilder
  5. 【UDP协议头解析】
  6. Linux(四):虚拟机Ubuntu 卸载
  7. 随机获取图片的api接口
  8. 对HDLC 和PPP实验的总结
  9. android 背景逐渐变暗,UI:使View背景逐渐变暗的方法
  10. phpStudy + JspStudy 2014.10.02 下载
  11. IEEE会议文章接收后提交流程
  12. html有哪些段落及排版标记,04.HTML排版标记
  13. kdc服务器密码修改,kdc配置HA · ZHY ZONE
  14. 电脑上的ofd格式文件如何打开呢_ofd文件怎么打开用什么软件
  15. what is AOP
  16. 计算机cpu风扇关闭,cpu风扇怎么关闭
  17. zookeeper和kafka的SASL认证以及生产实践
  18. 【机器学习面经】实验室祖传机器学习重难点(第一弹)
  19. OPenGL 内部摄像机(Inside out:Camera)
  20. ultra96开发板安装升级PYNQ2.5.1设置

热门文章

  1. 深入浅出学java_《深入浅出学JAVA开发初级》
  2. VS2010中 C++创建DLL图解
  3. Visual C++中 #include stdafx.h 头文件的用法
  4. 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?
  5. TD-SCDMA智能天线波束赋形能力的讨论
  6. c++远征之多态篇——运行时类型识别(RTTI)
  7. bzoj1233 单调队列优化dp
  8. 如何通过对方IP地址查对方的MAC
  9. 让互联网助小组合作一臂之力
  10. 将一个数组里面的奇数全部排在前面,偶数排在后面