题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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题】删除链表中的重复节点的更多相关文章

  1. 【校招面试 之 剑指offer】第18题 删除链表中的节点

    题目一:在O(1)时间内删除链表节点. 给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. 思路:(1)如果要删除的节点不是链表的尾节点,则将被删除节点的内容复制到该节点,然 ...

  2. 剑指offer五十六之删除链表中重复的结点

    一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  3. [刷题] 剑指offer 面试题18:删除链表节点

    要求 给定单向链表的头指针和一个节点指针,在O(1)时间内删除该节点 常规思路:从头节点a开始顺序遍历,发现p指向要删除的节点i,然后把p的m_pNext指向i的下一个节点j,时间复杂度O(n) O( ...

  4. 【剑指Offer】面试题18. 删除链表的节点

    题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...

  5. 《剑指offer》面试题18. 删除链表的节点

    问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = ...

  6. 剑指offer.在O(1)时间内删除链表节点

    给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点.假设链表一定存在,并且该节点一定不是尾节点. 样例 输入:链表 1->4->6->8 删掉节点:第2个节点即6(头节 ...

  7. 剑指offer之 O(1)时间删除链表结点

    问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. package Problem13; /* * 问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1 ...

  8. [剑指offer]Q13:O(1)时间删除链表的结点

    通常我们所说的删除链表的某个结点,是彻底删除该结点的空间.而要这么做就必须知道其前驱结点.这里的想法是,链表中存储的val是同类型的,仅仅要将该结点的val内容删除就能够了. 那么就能够用该结点的后继 ...

  9. 【剑指offer】面试题 18. 删除链表的节点

    面试题 18. 删除链表的节点

随机推荐

  1. 160多个android开源码汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包含ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  2. 配置带用户权限的docker registry v2

    v1版本的docker registry用nginx配置,v2版本的用nginx有些问题,客户端总是会请求到v1/下面去, 以下从 http://blog.csdn.net/felix_yujing/ ...

  3. 关于docker 意外停止,重新快速启动措施

    1. 我们要重启这个镜像,需要知道这个镜像ID,类似这个: 7079ff99e10ac326726a364348853c0e508cad8ce00ae970f3c800f172a40252 那么你可以 ...

  4. Unity应用架构设计(5)——ViewModel之间如何共享数据

    对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式.有经验的开发人员往往会把一个View分解多个SubView.那么,如何在多个SubView之间 ...

  5. There is a chart instance already initialized on the dom!警告

    使用Echarts插件的时候,多次加载会出现There is a chart instance already initialized on the dom.这个错误,改插件已经加载完成. 并且如果你 ...

  6. The thumbprint of same asymmetric key is not same in 'SQL Server Connector for Microsoft Azure Key Vault' 1.0.4.0 and 'SQL Server Connector for Microsoft Azure Key

    https://support.microsoft.com/en-us/help/4470999/db-backup-problems-to-sql-server-connector-for-azur ...

  7. Atitit 烈火计划进展报告 r61

    Atitit 烈火计划进展报告 r61 1. 烈火计划主要包括几个东西 1 1.1. 2014.12 邮箱编码读取 1 1.2. 2017.1  垂直领域图片下载器  草料图片下载器 1 1.3. q ...

  8. mybatis中_parameter使用和常用sql

    mybatis中_parameter使用和常用sql   mybatis中_parameter使用和常用sql 在用自动生成工具生成的mybatis代码中,总是能看到这样的情况,如下: <sel ...

  9. Smart Link

    Smart Link通过两个接口相互配合工作来实现功能.这样的一对接口组成了一个Smart Link组.为了区别一个Smart Link组中的两个接口,我们将其中的一个叫做主接口,另一个叫做从接口.同 ...

  10. List接口的实现类(Vector)(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)

      LinkedList提供以下方法:(ArrayList无此类方法) addFirst();    removeFirst();   addLast();   removeLast(); 在堆栈中, ...