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

链表销毁节点,一进来就将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日

悬赏问题

  • ¥33 找熟练码农写段Pyhthon程序
  • ¥100 怎么让数据库字段自动更新
  • ¥15 antv g6 力导向图布局
  • ¥15 各位为什么总是报错attributeerror呢,报nonetype object has no attribute group
  • ¥15 quartz框架,No record found for selection of Trigger with key
  • ¥15 锅炉建模+优化算法,遗传算法优化锅炉燃烧模型,ls-svm会搞,后面的智能算法不会
  • ¥20 MATLAB多目标优化问题求解
  • ¥15 windows2003服务器按你VPN教程设置后,本地win10如何连接?
  • ¥15 求一阶微分方程的幂级数
  • ¥15 关于#线性回归#的问题:【统计】回归系数要转化为相关系数才能进行Fisher' Z转化吗(相关搜索:回归模型)