冰㒱沝 2023-03-05 20:11 采纳率: 50%
浏览 16
已结题

链表销毁节点,一进来就将L给释放掉了,那么我如何判断P是否等于L?

万能的大数据,推荐给知道的人叭!₍˄·͈༝·͈˄*₎◞ ̑̑。真的不会
脑袋真的不够用,已经绝望了,再也不想学习计算机了

链表销毁节点,一进来就将L给释放掉了,那么我如何判断P是否等于L?

void DestoryLinkNode (LinkNode* &L)

{

LinkNode *pre=L,*p=L->next;

while(p!=L)

{

free(pre);//销毁节点,一进来就将L给释放掉了,那么我如何判断P是否等于L?

pre=p;

p=p->next;

}

free(pre);

}

```c++


因为参数传递的是L的地址,free只是释放了那个节点的空间,所以是可以找到L的地址,也就是可以判断的??

yeap?

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-05 20:17
    关注

    “Devil组”引证GPT后的撰写:

    • 是的,参数传递的是指向L的指针,即L的地址。在销毁链表的过程中,只是释放了节点的空间,L的地址并没有被释放,所以在函数执行过程中可以访问L的地址,可以判断P是否等于L。

    在该函数中,参数L是一个指向链表头结点的指针,因此在函数执行过程中,如果将L释放掉,那么链表就不存在了,也就无法判断p是否等于L。

    • 在销毁链表的过程中,可以记录下原来的头结点指针L,并且在销毁完最后一个节点后,将L赋为NULL,表示链表已经被销毁了。这样在判断p是否等于L时,可以先检查L是否为NULL,如果是,则链表已经被销毁,此时p也肯定不等于L。如果L不为NULL,则可以像原来一样比较p和L的地址是否相等。

    具体实现如下:

    void DestroyLinkNode(LinkNode* &L) {
        if (L == NULL) {
            return; // 如果链表已经被销毁,直接返回
        }
        LinkNode *pre = L, *p = L->next;
        while (p != L) {
            free(pre); // 销毁节点
            pre = p;
            p = p->next;
        }
        free(pre);
        L = NULL; // 将L赋为NULL,表示链表已经被销毁
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 文本数据挖掘分析报告
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下: