码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-04-27 20:24:45      阅读:755      评论:0      收藏:0      [点我收藏+]

标签:单链表   递归   链表   指针   

下面是单链表的数据结构

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

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

标签:单链表   递归   链表   指针   

原文地址:http://blog.csdn.net/idiotxl_1020/article/details/24578671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!