• 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;
            }
        }
    }

  • 相关阅读:
    angularjs学习笔记—工具方法
    js日期格式转换的相关问题探讨
    vue路由原理剖析
    如何减少UI设计师产品与前端工程师的沟通成本
    前端优化带来的思考,浅谈前端工程化
    前端入门方法
    自写juqery插件实现左右循环滚动效果图
    前端大综合
    前端收集
    如何在代码中减少if else语句的使用
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4176934.html
Copyright © 2020-2023  润新知