请问下列程序在删除节点时一定要用pt指针吗

学习 时间:2026-04-03 12:11:29 阅读:622
请问下列程序在删除节点时一定要用pt指针吗Status PolyDifferential(LinkedPoly &L){LinkedPoly p,q,pt;q=L;p=L->next;while(p!=L){if(p->data.exp==0){pt=p;p=p->next;q->next=p;free(pt);//为什么在删除这个结点时要先用pt指向它?}else{p->data.coef=p->data.coef*p->data.exp;p->data.exp--;q=p;p=p->next;}}return OK;}如果在删除结点时用p->next=q->next;free(q);q=p->next;代替pt=p;p=p->next;q->next=p;free(pt); 有什么不好?写错了是用q->next=p->next;free(p);p=q->next;代替

最佳回答

激动的野狼

忐忑的小蘑菇

2026-04-03 12:11:29

q->next=p->next;   free(p);   p=q->next;这里你把p释放了以后,p怎么还能指向下一个节点?所以你要多定义一个节点来表示待删除节点 1。我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的。2。一般来说,待删除的结点是由结点的数据确定的。然而我们还要操作待删除结点之前的结点(或指针),以连接前后两段链表。3。令pGuard指针为待删除结点的前趋结点指针。由于要对待删除结点作内存释放,需要有一个指针p指向待删除结点。4。如果待删除结点为头结点,则我们要操作表头head,作为特殊情况处理。(你这里没有考虑)5。在删除结点的过程中,仍然要始终保持所有的结点都在我们的控制范围内,保证链表的完整性。为了达到这一点,我们还是采用先连后断的方式:先把待删除结点的前趋结点和它的后继结点连接,再把待删除结点与它的后继结点断开,并释放其空间。 再问: 先把前一个节点的next指向p的next 释放p指针所指地址后,这个指针不是还能用吗?所以它还可以指向新的p结点 保证链表的完整性有什么实际意义,先断开链表再接上有什么坏处? 再答: 你free(p)后怎么找到前一个节点?你的p就是用来找到待删除节点的前一个节点,如果不是就p->next再问: q存了p前面的结点,要删除p的话先用q->next=p->next 然后free(p), 之后p=q->next 这样也可以让p找到下一个节点 前一个节点用q来存 再答: q得到待删除节点,然后释放它所在的内存,你多看几遍书吧画一遍图,不然我怎么讲也没用

最新回答共有2条回答

  • 柔弱的飞鸟
    回复
    2026-04-03 12:11:29

    q->next=p->next;   free(p);   p=q->next;这里你把p释放了以后,p怎么还能指向下一个节点?所以你要多定义一个节点来表示待删除节点 1。我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的。2。一般来说,待删除的结点是由结点的数据确定的。然而我们还要操作待删除结点之前的结点(或指针),以连接前后两段链表。3。令pGuard指针为待删除结点的前趋结点指针。由于要对待删除结点作内存释放,需要有一个指针p指向待删除结点。4。如果待删除结点为头结点,则我们要操作表头head,作为特殊情况处理。(你这里没有考虑)5。在删除结点的过程中,仍然要始终保持所有的结点都在我们的控制范围内,保证链表的完整性。为了达到这一点,我们还是采用先连后断的方式:先把待删除结点的前趋结点和它的后继结点连接,再把待删除结点与它的后继结点断开,并释放其空间。 再问: 先把前一个节点的next指向p的next 释放p指针所指地址后,这个指针不是还能用吗?所以它还可以指向新的p结点 保证链表的完整性有什么实际意义,先断开链表再接上有什么坏处? 再答: 你free(p)后怎么找到前一个节点?你的p就是用来找到待删除节点的前一个节点,如果不是就p->next再问: q存了p前面的结点,要删除p的话先用q->next=p->next 然后free(p), 之后p=q->next 这样也可以让p找到下一个节点 前一个节点用q来存 再答: q得到待删除节点,然后释放它所在的内存,你多看几遍书吧画一遍图,不然我怎么讲也没用

上一篇 希腊神话英雄人物和事迹

下一篇 有一列火车以每分钟600m的速度要过完两座桥,过第二座桥必过第一座桥多5s,又知第二座桥的长度比第一座桥长度的2倍少50