请问下列程序在删除节点时一定要用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指向它
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/09 08:52:04
请问下列程序在删除节点时一定要用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指向它
请问下列程序在删除节点时一定要用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;代替
请问下列程序在删除节点时一定要用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指向它
q->next=p->next;
free(p);
p=q->next;
这里你把p释放了以后,p怎么还能指向下一个节点?所以你要多定义一个节点来表示待删除节点
1.我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的.
2.一般来说,待删除的结点是由结点的数据确定的.然而我们还要操作待删除结点之前的结点(或指针),以连接前后两段链表.
3.令pGuard指针为待删除结点的前趋结点指针.由于要对待删除结点作内存释放,需要有一个指针p指向待删除结点.
4.如果待删除结点为头结点,则我们要操作表头head,作为特殊情况处理.(你这里没有考虑)
5.在删除结点的过程中,仍然要始终保持所有的结点都在我们的控制范围内,保证链表的完整性.为了达到这一点,我们还是采用先连后断的方式:先把待删除结点的前趋结点和它的后继结点连接,再把待删除结点与它的后继结点断开,并释放其空间.