剑指offer——python【第56题】删除链表中的重复节点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
有好几种方法,先讲两种,不递归的,第三种递归,暂时不会。。
第一种,简单粗暴,把链表所有元素都放到一个列表里,然后把列表中数量大于1的元素删除,再把这些元素串成链表
第二种,设定一个新的头结点(0),然后定两个指针,一个指针初始节点在原来的头结点,另一个指针在0结点,然后让0结点作为头结点的根节点;第一个指针去遍历链表,当遇到重复结点的时候,就跳过,跳到后面的非重复节点上去,第二个指针就始终停在重复节点的前一个节点(也就是非重复节点)上。
详细描述一下,以题目描述中的链表为例,
1、一开始指针一在1节点上,指针二在0节点上,然后指针一、二分别向后遍历,当遇到重复节点时,此时指针一是3节点,指针二是2节点,指针二不会动,指针一会跳到指针4上去,同样遇到了重复节点4,指针一会跳到节点5上去,然后再把指针一的结点5和指针二的节点2相连,这样就删除了重复节点
解答
方法1
class Solution:
def deleteDuplication(self, pHead):
# write code here
res = []
while pHead:
res.append(pHead.val)
pHead = pHead.next
res = list(filter(lambda c: res.count(c) == 1, res))
newHead = ListNode(0)
pre = newHead
for i in res:
node = ListNode(i)
pre.next = node
pre = pre.next
return newHead.next
方法2
class Solution:
def deleteDuplication(self, pHead):
first = ListNode(0)
first.next = pHead
pre = pHead
last = first
while pre and pre.next:
if pre.val != pre.next.val:
pre = pre.next
last = last.next
else:
val = pre.val
while pre and pre.val == val:
pre = pre.next
last.next = pre
return first.next
剑指offer——python【第56题】删除链表中的重复节点的更多相关文章
- 【校招面试 之 剑指offer】第18题 删除链表中的节点
题目一:在O(1)时间内删除链表节点. 给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. 思路:(1)如果要删除的节点不是链表的尾节点,则将被删除节点的内容复制到该节点,然 ...
- 剑指offer五十六之删除链表中重复的结点
一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- [刷题] 剑指offer 面试题18:删除链表节点
要求 给定单向链表的头指针和一个节点指针,在O(1)时间内删除该节点 常规思路:从头节点a开始顺序遍历,发现p指向要删除的节点i,然后把p的m_pNext指向i的下一个节点j,时间复杂度O(n) O( ...
- 【剑指Offer】面试题18. 删除链表的节点
题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...
- 《剑指offer》面试题18. 删除链表的节点
问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = ...
- 剑指offer.在O(1)时间内删除链表节点
给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点.假设链表一定存在,并且该节点一定不是尾节点. 样例 输入:链表 1->4->6->8 删掉节点:第2个节点即6(头节 ...
- 剑指offer之 O(1)时间删除链表结点
问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. package Problem13; /* * 问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1 ...
- [剑指offer]Q13:O(1)时间删除链表的结点
通常我们所说的删除链表的某个结点,是彻底删除该结点的空间.而要这么做就必须知道其前驱结点.这里的想法是,链表中存储的val是同类型的,仅仅要将该结点的val内容删除就能够了. 那么就能够用该结点的后继 ...
- 【剑指offer】面试题 18. 删除链表的节点
面试题 18. 删除链表的节点
随机推荐
- Docker Compose安装以及入门
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...
- bootstrap-3-上传图片-列表显示
效果 导入的js和css <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href=" ...
- Hibernate 离线对象构建通用查询
1.业务场景 当下主系统衍生子业务系统已经成为常态,像京东的物流和金融,阿里的支付宝和淘宝. 子业务系统需要对主系统的资源进行访问,这里的资源我具体化为数据库数据,但日常业务中可能不只是数据. 抽象服 ...
- 每天一个linux命令(15):tail命令
1.命令简介 tail (tail) 用来显示档案的结尾(默认为10行)至标准输出中.若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头.如果不指定文件或文件为"-" ...
- glog日志库使用笔记
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...
- linux中Ctrl+D,Ctrl+Z,Ctrl+C
1.用stty -a查看控制字符的终端配置 2. ctrl-c 是发送 SIGINT 信号.终止一个进程 ctrl-z 是发送 SIGSTOP信号,挂起一个进程;命令fg唤回进程. ctrl-d 不是 ...
- 一个网站SEO优化方案
首先,前端/页编人员主要负责站内优化,主要从四个方面入手: 第一个,站内结构优化 合理规划站点结构(1.扁平化结构 2.辅助导航.面包屑导航.次导航) 内容页结构设置(最新文章.推荐文章.热门文章.增 ...
- php: 统计在线人数
<?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=60;// ...
- vim编辑器里shift + 3 出现高亮问题,怎么取消掉
在编辑器里非编辑状态,输入: shift + 3 (#) shift + 8 (*) 会出现高亮显示,看着很不舒服, 取消方式: :noh :/aaa (随便的字母或数字都可)
- 关于bazel使用笔记
当我们在build一个文件时,需要另外的放置cache时,我们需要: bazel --output_user_root=/path/to/directory build //foo:bar