题目:


在O(1)的时间内删除链表节点。给定链表的头指针和待删除的节点指针,定义一个函数在O(1)的时间内删除该节点。

剑指offer的思路,顿时觉得极妙。删除节点node1,先把其下一个节点node2的内容复制到node1这个节点,然后把节点node1的指针指向node2的下一个节点,最后删除节点node2。

解题:

def delete(link, node):
if node.next: # 删除节点不是最后一个节点,此时链表也必不可能只有一个节点
p = node.next
node.val = p.val
node.next = p.next
del p
elif link == node: # 链表只有一个节点。(删除的节点即是头2节点也是尾节点)
del node
link = None
else: # 其他情况,即链表长度大于1且删除的是尾节点
p = link
while p.next != node:
p = p.next
p.next = None
del node

在O(1)的时间内删除链表节点的更多相关文章

  1. JZ-069-在 O(1) 时间内删除链表节点

    在 O(1) 时间内删除链表节点 题目描述 在 O(1) 时间内删除链表节点. 方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复 ...

  2. 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 由于给定的是单向链表,正常删除链表的时间复杂度是查找链表的时间复杂度即O(n),如果要求在O(1)时间复杂度内删除节点 ...

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

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

  4. 【Offer】[18-1] 【在O(1)时间内删除链表节点】

    题目描述 思路分析 测试用例 代码链接 题目描述 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 思路分析 一般我们删除单链表中的节点是需要遍历链表,找到要删除节点的前一个 ...

  5. 13 在 O(1) 时间内删除链表节点

    删除链表的一个结点,用下一个结点覆盖掉要删除的结点,再释放掉要删结点的下一个结点的内存 Java: public ListNode deleteNode(ListNode head, ListNode ...

  6. 每天一道算法题(4)——O(1)时间内删除链表节点

    1.思路 假设链表......---A--B--C--D....,要删除B.一般的做法是遍历链表并记录前驱节点,修改指针,时间为O(n).删除节点的实质为更改后驱指针指向.这里,复制C的内容至B(此时 ...

  7. 基于visual Studio2013解决面试题之0604O(1)时间复杂度删除链表节点

     题目

  8. 【编程题目】在 O(1)时间内删除链表结点

    60.在 O(1)时间内删除链表结点(链表.算法).题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点.链表结点的定义如下:struct ListNode{int m_nKey;List ...

  9. 数据结构——算法之(027)( 在O(1)时间内删除链表结点)

    [申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:Mr_chenping@163.com] 题目:在O(1)时间内删除链表结点.且不知道链表头 题目分析: 1.把要删除节点的下 ...

随机推荐

  1. K8s Service原理介绍

    Service的工作方式有三种: 第一种: 是Userspace方式 如下图描述, Client Pod要访问Server Pod时,它先将请求发给本机内核空间中的service规则,由它再将请求, ...

  2. ex2

    #include <stdio.h> int main() { int days; printf("输入一个整数: \n"); scanf("%d" ...

  3. https与http的区别?

    https要比http更加安全一些,也就是说http协议是由ssl+http协议构建的可进行加密传输.身份验证的网络协议要比http协议安全 现在大多数的网站都逐渐用https://,因为安全问题太重 ...

  4. 权重轮询调度算法(WeightedRound-RobinScheduling)

    权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现 ----参考Nginx中负载均衡算法实现 这里主要参考这篇文章的实现: Nginx 负载均衡-加权轮询策略 ...

  5. 【转】目前为止最透彻的的Netty高性能原理和框架架构解析

    转自:https://zhuanlan.zhihu.com/p/48591893 1.引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器 ...

  6. ubuntu下Vim安装失败

    sudo apt-get install vim Reading package lists... Done Building dependency tree Reading state inform ...

  7. Cross-channel Communication Networks

    Cross-channel Communication Networks 2019-12-13 14:17:18 Paper: https://papers.nips.cc/paper/8411-cr ...

  8. ThinkPHP 5.1 跨域中间件

    <?php namespace app\http\middleware; class CrossDomain { public function handle($request, \Closur ...

  9. 使用visual studio code运行html

    可以安装插件:open in browser 安装好插件后,编辑html网页的时候,右键多了两个菜单: 1.Open in Default Browser 2.Open in Other Browse ...

  10. Linux下挂载超过2T的磁盘

    1.使用命令进入交互模式并且查看当前硬盘分区信息 parted /dev/sdb p 2.删除当前存在分区,并在此查看结果 rm 1 p 3.将硬盘格式化为gpt mklabel gpt 4.对磁盘分 ...