[CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
2024-08-25 18:58:22
2.1 Write code to remove duplicates from an unsorted linked list.
FOLLOW UP
How would you solve this problem if a temporary buffer is not allowed?
这道题让我们移除无序链表中的重复项,在LeetCode中有两道类似的题是Remove Duplicates from Sorted List 移除有序链表中的重复项 和 Remove Duplicates from Sorted List II 移除有序链表中的重复项之二。这两道都是针对有序链表的,而这道题是针对无序链表的,其实难度也不是很大。很多对于链表的处理的题都需要在头结点前建立一个dummy node,目的是为了防止头结点被移除,没法返回新的头结点位置。而这道题不用,因为此题让我们删除重复的节点,不是全删掉,而是会保留一个,那么不管头结点有没有重复项,都会保留下来。这题我们可以用哈希表来解,思路是对于每一个节点,如果在哈希表中存在,则删掉,若不存在,则加入哈希表,参见代码如下:
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
ListNode *pre = NULL, *cur = head;
int m[] = {};
while (cur) {
if (m[cur->val] > ) {
pre->next = cur->next;
} else {
++m[cur->val];
pre = cur;
}
cur = cur->next;
}
return head;
}
};
这道题的Follow Up让我们不要用额外空间,即空间复杂度应为O(1),那么我们需要两个while循环来解,同时需要两个指针,第一个指针指向一个节点,第二个指针从下一个为位置开始遍历到链表末尾,遇到相同的就删掉。以此类推直到第一个指针完成链表的遍历即可删掉所有的重复项,整体的思路和冒泡排序有些类似,但是这种方法的时间复杂度为O(n2),是一种以时间来换取空间的方法,参见代码如下:
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
ListNode *pre = head, *cur = head;
while (pre) {
cur = pre->next;
while (cur) {
if (cur->val == pre->val) {
pre->next = cur->next;
}
cur = cur->next;
}
pre = pre->next;
}
return head;
}
};
最新文章
- EF MYSQL 不能选择实体框架版本
- [XAF] How to represent an enumeration property via a drop-down box with check boxes
- 详细讲解nodejs中使用socket的私聊的方式
- mysql 日志文件mysql-bin文件清除方法,和mysql-bin相关文件的配置
- SSH相关
- 选出N个不重复的随机数
- 行转列一定要sum
- [Spring] IOC - study
- SVN创建Tags
- 原生js 实现的瀑布流
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
- python2.7中使用mysql (windows XP)
- WPS 去掉自动打开的文档漫游和在线模板
- sql查询每门课程成绩最高的学生
- java中 SSL认证和keystore使用
- 如何做Gibbs采样(how to do gibbs-sampling)
- drupal 7.23 上传中文命名文件bug
- Linux常用命令总结——文件管理
- Java之路第一步——第一行Java代码
- Android项目中独立Git项目分库后的编译调试时Gradle的配置
热门文章
- win7 解决git clone 连接被拒绝—hosts文件过期
- 如何写BaseDomain
- 解决Spring4 MVC请求json数据报406错误
- .bat脚本基本命令语法
- mysql由浅入深探究(一)----数据库简介与mysql安装
- facebook开源前端UI框架React初探
- A daemon process class in python
- 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术
- OpenXml 入门----OpenXml Tools使用技巧
- Fisker大师用ZBrush制作兽人萨尔全过程