以指针和引用两种参数实现删除单链表L中所有值为X的结点的函数

时间:2014-04-27 20:24:45   收藏:0   阅读:755

下面是单链表的数据结构

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*Linklist;

1.以指针参数实现

void delete_x_1(LNode *head,ElemType x){//head为单链表头结点,删除结点的值为x
    LNode *l = head;
    LNode *p = head->next;
    while(p != null){
        if(p->data == x){
        l->next = p->next;
        free(p);
        }
        l = p;
        p = p->next;
    }
}

这是最一般的方法,使用指针来实现。


2.以递归跟引用参数实现

void delete_x_2(Linklist &L,ElemType x){//为单链表头结点引用,删除结点的值为x
    LNode *p;
    if(L == null){
        return;
    }
    if(L->data == x){
        p = L;
        L = L->next;
        free(p);
        delete_x_2(L,x);
    }else{
        delete_x_2(L->next,x);
    }
}
有些人认为直接free掉p结点会造成断链,实际上因为L为引用,是直接对原链表进行操作,因此不会断链。




以指针和引用两种参数实现删除单链表L中所有值为X的结点的函数,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!