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

来源:互联网 发布:android打开移动数据 编辑:程序博客网 时间:2024/05/18 06:33

下面是单链表的数据结构

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为引用,是直接对原链表进行操作,因此不会断链。




1 0
原创粉丝点击