为什么free后链表为啥没断开,能解释一下p之前的节点next为什么会自动指向p之后的数

为什么free后链表没有断开,能解释一下p之前的节点next为什么会自动指向p之后的数。能解释一下free干了什么工作吗?voidDel_X(LinkList&L,Ele... 为什么free后链表没有断开,能解释一下p之前的节点next为什么会自动指向p之后的数。能解释一下free干了什么工作吗?
void Del_X(LinkList &L,ElemType x) {
if(L==NULL) return;
if(L->data==x){
LNode* p=L;
cout<<L<<' '<<L->next<<endl;
L=L->next;
free(p);
Del_X(L,x);
}
else
Del_X(L->next,x);
}<!--<!--
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
展开
 我来答
wanglixin1001
2015-09-18 · TA获得超过4174个赞
知道大有可为答主
回答量:1758
采纳率:80%
帮助的人:884万
展开全部

首先如果第一个节点即匹配x则不存在所谓的断开问题。考虑如图所示的三个节点y,x,z,第二个节点x为匹配节点。起始的时候L指向第一个节点y。如图(1)中用红色指针所示。

进入Del_X函数后,第一个y节点不匹配,则执行else选项。

则新的L为原先的L->next,如图(2)中红色指针所示。这是因为Del_X函数中LinkList &L传引用所致。则再次递归进入Del_X函数后,L->data匹配x,则执行

L=L->next,即(2)中红色指针将指向z节点。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式