一个链表问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 09:18:37
status ListDelete_DuL(DuLinkLinkList &L,int i,ElemType &e)
{
//删除带头结点的双链循环线性表L的第i个元素,i的合法值为1<=i<=表长
if(!(p=GetElemP_DuL(L,i)))
return ERROR;//p=NULL,即第i个元素不存在
e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p); return OK;
}
它最后要free(p),为什么还要做这个“e=p->data;”?(e是要删除的结点的值)

这个函数的意思是说
需要删除并释放该节点

但是还要将删除节点的内容拷贝出来放在e里面
e=p->data; //data应该是普通的内建类型

可能在
ListDelete_DuL调用之后还要做一些事情
比如打印刚才删除的节点内容
那麼e 就派上用场了

你仔细看看你函数传进来的参数:ElemType &e
这是该函数本身提供的功能之一:将待删除结点的数据保存在数据e中传出。