wScorpion

导航

【数据结构-线性表之单链表】在一个无头节点的单链表中删除所有值为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;

posted on 2017-05-13 17:08  wScorpion  阅读(449)  评论(0)    收藏  举报