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

  • 相关阅读:
    赋值问题
    构造方法的作用
    this的使用
    三目运算符和形参的使用
    构造方法作用:给所有对象进行相同的初始化操作
    成员变量和局部变量
    相关开发的书籍名汇集
    html ---- web sql 例子
    让input表单输入框不记录输入过信息的方法
    css实现两端对齐的3种方法
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4176934.html
Copyright © 2011-2022 走看看