您的位置:首页 > 其它

第1章第2节练习题1 删除指定元素

2016-01-10 18:44 288 查看

问题描述

设计一个递归算法,删除不带头节点的单链表L中所有值为x的结点。

算法思想

因为题目要求使用递归的方式删除指定结点,那么我们可以先列出递归的基本模型:


指针p指向要删除的结点,指针q则为要删除结点的后继结点。



递归出口:


[code]    if(p==NULL){
        return;
    }


递归主体:


[code]     DelNodeX(p->next,x);
     DelNodeX(p,x);


因为本题中,没有设置头节点,当删除的时候必须从第一个结点开始删除,因此我们参考第1章第2节线性表的链式表示(1)中的2.5.2删除自身结点来实现该算法。但是本算法依旧存在一个较大的Bug便是当x为最后一个结点时,便会出错。

算法描述如下:

算法描述

[code]void DelNodeX(LNode *p, ElemType x)
{
    if(p==NULL){
        return;
    }
    LNode*  q=p->next;
    if(p->data==x){
        p->data=q->data;
        p->next=q->next;
        free(q);
        DelNodeX(p,x);
    }else{
        DelNodeX(p->next,x);
    }
}


具体代码见附件

附件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: