[面试题]单链表:如何在O(1)的时间复杂度下删除指定节点?

转载 2018年04月17日 10:01:51

问题描述:

对于一个如下所示的单链表,存在Head指针指向链表头,另外有一个Ptr指针指向链表中的任意节点。现在要求在O(1)的时间复杂度下删除Ptr指针所指向的节点。
示意图

问题分析:

正常的思路是:要删除Ptr指向的D节点,我们需要找到指向D节点的C节点。要找到C节点,我们需要遍历整个链表,时间复杂度是O(1)。
正确的思路是:我们可以很快找到D节点所指向的下一个节点:E节点,而且删除E节点的时间复杂度是O(1)。我们先把E节点删除,再将E节点的数据存放到D节点中,伪造一个新的E节点。这样就成功地删除D节点了。最后需要考虑边界条件:Ptr指针是链表的头部的情况,Ptr指针指向链表的尾部的情况。

【面试题】在O(1)时间复杂度删除链表节点

题目描述给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。样例 给定 1->2->3->4,和节点 3,返回 1->2...
  • zwhlxl
  • zwhlxl
  • 2015-07-28 15:01:17
  • 2347

单链表中实现O(1)时间复杂度删除节点

单链表中实现O(1)时间复杂度删除节点链表节点struct LinkNode { datatype data; LinkNode* next; }当删除单链表中某个节点时,最容易想到的...
  • pepping798
  • pepping798
  • 2015-06-17 09:20:11
  • 1716

LintCode解题笔记 - 在O(1)时间复杂度删除链表节点

给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。原文链接: http://www.lintcode.com/zh-cn...
  • xiewenjiang110
  • xiewenjiang110
  • 2015-07-08 21:32:22
  • 1392

mtk笔试题-----快速删除单链表中一个结点。时间复杂度为o(1)

(转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。 2011-02-14 15:35 1500人阅读 ...
  • jack2164
  • jack2164
  • 2013-11-21 16:57:16
  • 1337

LintCode-在O(1)时间复杂度删除链表节点

给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。您在真实的面试中是否遇到过这个题? Yes 样例 给定 1->2-...
  • xiaowei132
  • xiaowei132
  • 2015-08-31 20:08:08
  • 948

单向链表在O(1)时间内删除一个节点

单向链表在O(1)时间内删除一个节点
  • Li_Ning_
  • Li_Ning_
  • 2016-06-05 12:36:23
  • 2736

剑指Offer面试题13(java版):在O(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 在单向链表中删除一个节点,最常规的方法无疑是从链表的头结点开始,顺序遍历查找要删除的节点,并在链表中删除该节点。 ...
  • jsqfengbao
  • jsqfengbao
  • 2015-07-31 20:55:53
  • 2472

面试题13:在O(1)时间 内删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数的定义如下: struct ListNode { int value; ListNode*...
  • SmartBrave
  • SmartBrave
  • 2016-06-11 11:02:18
  • 1323

删除单链表节点O(1)

一,题目给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode { int m_nKey; ListNode* m_pNext; };函数的声明如...
  • luojian5900339
  • luojian5900339
  • 2015-07-10 16:27:39
  • 1762

单链表的删除算法时间复杂度O(1)和O(n)

平时我们在计算单链表的第i个节点删除时间复杂度时一般认为是O(n),过程如下 1.先从头节点开始遍历链表,找到第i-1个节点 2.将第i-1节点next指向第i个节点的next 可以看到时间主要...
  • JackieeeCheng
  • JackieeeCheng
  • 2017-05-19 21:28:32
  • 1258
收藏助手
不良信息举报
您举报文章:[面试题]单链表:如何在O(1)的时间复杂度下删除指定节点?
举报原因:
原因补充:

(最多只允许输入30个字)