zoukankan      html  css  js  c++  java
  • 编程之美:从无头单链表中删除节点,讨论

    1.问题描写叙述

    如果有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。

    例如以下图所看到的:

     这样的情况大家都知道,将下一个节点的data和next复制到当前节点,并将当前节点的next设置为下下个节点,然后释放下一个节点所占内存(free),

    假设红字条件去掉:

    还用上面的方法就有问题,一般上面方法的代码例如以下:

    void DeleteRandomNode(Node* pCurrent)
    {
         if(pCurrent == NULL)
                return;
         Node* pNext = pCurrent->next;     
         if(pNext == NULL)
         {
              //表明当前节点是最后一个节点
              pCurrent = NULL;//这里假设为最后一个节点就将当前指针设置为NULL,这些写法有问题!
         }
         pCurrent->data = pNext->data;
         pCurrent->next = pNext->next;
         
         delete pNext; 
    }

        红色凝视说明了问题:将pCurrent设置为NULL并没有改变当前节点的上一个节点的next值,由于上一个节点的next存的是pCurrent指向的Node的地址。

        简单来说就是pCurrent只存了一个内存地址,而将pCurrent设置为NULL这一行为,并没有改变上一节点的next值。假设当前节点是最后一个节点,那么上一个节点的next值就应该为NULL,可是显然上述方法无法达到这一要求。所以红字条件去掉之后就无法通过上述方法解决这个问题了。

       

  • 相关阅读:
    Python中模块之shutil及zipfile&tarfile的功能介绍
    Python中模块之sys的功能介绍
    Python中模块之os的功能介绍
    Python中模块之random的功能介绍
    Python中模块之time&datetime的功能介绍
    Python中模块json与pickle的功能介绍
    博客更新地址,
    Js 执行上下文和作用域
    Js 原型,原型链
    Js 中的事件委托/事件代理
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4006820.html
Copyright © 2011-2022 走看看