【数据结构-线性表之单链表】在一个无头节点的单链表中删除所有值为x的节点,使用递归
要求如题,给出如下代码:
void Del_x(LinkList &L, ElemType x)
{
LinkList p = NULL;
if (L.next == NULL) //0 递归结束的条件
return;
if (L.data == x) //1
{
p = L;
L = L->next;
free(p);
Del_x(L, x);
}
else //2
Del_x(L->next, x);
}
在这里,其实free(p);这条语句执行后单链表并没有断链。原因如下:
因为在函数的参数里,L是一个引用参数,对L的操作直接反映在原始链表上。
假设有三个节点 1 next -> x next -> 3 NULL,在这三个节点中,第一次递归函数传递的是 L->next,此时 L.data == x,所以执行到 1 中,此时的L = L->next;可以看做是L->next = L->next->next;
浙公网安备 33010602011771号