问题描述:给定单相链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。

这个比较简单,做不做解释,直接看参考代码,不过有一点就是要注意,还是要看删除的节点类型,不能保证总是O(1)时间

参考代码:

void DeleteNode(ListNode** pHead,ListNode *pTobeDelete)
{
    if ((pHead == NULL) || (*pHead == NULL) || (pTobeDelete == NULL))
    {
        return;
    }
 
    //删除的是链表中间的节点
    if (pTobeDelete->m_pNext != NULL)
    {
        ListNode *pNode = pTobeDelete->m_pNext;
        pTobeDelete->m_nValue = pNode->m_nValue;
        pTobeDelete->m_pNext = pNode->m_pNext;
        delete pNode;
        pNode = NULL;
    }
    else
    {//只有一个节点
        if (pTobeDelete == *pHead)
        {
            delete *pHead;
            pHead = NULL;
            pTobeDelete = NULL;
        }
        else
        {//删除的尾节点
            ListNode *pNode = *pHead;
            while (pNode->m_pNext != pTobeDelete)
            {
                pNode = pNode->m_pNext;
            }
            pNode->m_pNext = NULL;
            delete pTobeDelete;
            pTobeDelete = NULL;
        }
    }
}

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

  1. LeetCode之“链表”:在O(1)时间删除链表节点

    下边讨论暂不包括尾节点. 一般来说,我们要删除链表中的一个节点是需要知道其上一节点的.但我们真的需要吗? 其实我们可以将待删节点的下一节点的值和指向的下一节点赋予待删节点,然后删除待删节点的下一节点. ...

  2. 题目13 在O(1)时间删除链表节点

    ///////////////////////////////////////////////////////////////////////////////////// // 3. 题目13 在O( ...

  3. 剑指offer—第三章高质量代码(o(1)时间删除链表节点)

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点,链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode* m_pValue ...

  4. 剑指offer-面试题13.在O(1)时间删除链表节点

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 链表节点与函数的定义如下. 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点. 然后使得该节点的next ...

  5. 剑指offer---以O(1)时间删除链表节点

    问题:删除链表节点 要求:以O(1)时间 对于删除指定索引的链表元素大家都很熟悉,思路一般是从头遍历链表直到指定索引位置删除元素,然后维护一下指针即可,时间复杂度O(n).代码如下: // 删除pos ...

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

    注意分情况讨论: 1. 要删除的不是尾节点 2. 链表只有一个节点 3. 链表中有多个节点,删除尾节点 void DeleteNode(ListNode** pListHead, ListNode* ...

  7. 《剑指offer》面试题13 在O(1)时间删除链表节点 Java版

    这道题的关键是知道找到尾节点的前一个节点必须遍历,而且这样做了之后总的时间复杂度还是O(1),以及如何不破坏链表删除一个已知节点 public ListNode delete(ListNode hea ...

  8. 在O(1) 时间删除链表节点

    struct Node { int val; Node * next; }; void deleteNode(Node ** head, Node * target) { assert(head != ...

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

    http://blog.csdn.net/jsqfengbao/article/details/47175249

随机推荐

  1. 洛谷 P3367 【模板】并查集

    P3367 [模板]并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入输出格式 输入格式: 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数 ...

  2. memcached介绍及基本使用

    一:概念 memcached是LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件.现在已成为mixi,hatena,facebook ...

  3. Trucking(HDU 2962 最短路+二分搜索)

    Trucking Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration! CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) 解决办法

    启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration!  CPU accelerat ...

  5. 用continue语句的时候,要千万小心内存泄漏,当然还有return和break也是

    疑惑了大半年的内存泄漏,居然是因为这个原因- 有空学学QT的指针使用,可以使得代码更简洁.更不容易内存泄漏-

  6. Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)

    最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很 ...

  7. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ

    · 学后心得体会与部分习题实现 心得体会: 曾经只是了解了优先队列的基本性质,并会调用C++ STL库中的priority_queue以及 java.util.PriorityQueue<E&g ...

  8. 类linux 系统iptables 系统初始化配置

    #!/bin/bash iptables -F iptables -X /etc/rc.d/init.d/iptables save service iptables restart iptables ...

  9. C 本地文件夸网文件Cp操作

    1,linux平台C简单实现本地文件cp 码子及运行效果测试

  10. How to run OFBiz as a Service on linux

    Windows See this specific guide: How to Run OFBiz as Windows Service with Java Service Wrapper Linux ...