zoukankan      html  css  js  c++  java
  • O(1)时间删除链表节点

    问题描述:给定单相链表的头指针和一个节点指针,定义一个函数在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;
            }
        }
    }

  • 相关阅读:
    巡回赛 -- 简单的拓扑排序
    最简单的拓扑排序
    blockhouses
    部分和问题
    jfinal路由简单解析
    python mysql
    Gradle--ubuntu
    解决ssh登录后闲置时间过长而断开连接
    业界有很多MQ产品
    avalon---qunar ued
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4176934.html
Copyright © 2011-2022 走看看