递归去除线性表(链表)元素

#王道数据结构线性表:有读者认为直接去掉p结点会造成断链?

递归去除线性表(链表)元素

结论:确实会断链

一、 王道的答案

递归去除线性表(链表)元素
王道数据结构的答案:
递归去除线性表(链表)元素

递归去除线性表(链表)元素

二、个人见解

用c语言写的


#include<stdlib.h>
#include "stdio.h"

typedef int ElemType;


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


/**
 *
 * @param L         传入的链表
 * @param prior     要删除的节点的前驱
 * @param e         要删除的元素
 * @return          删除元素e后的链表,如果元素e在表头,不反回会产生错误
 */
LinkList del_recursion(LinkList L, LinkList prior, ElemType e) {
    LNode *p;
    if (L == NULL) return L;
    if (L->data == e && prior == NULL) {
        p = L;
        L = L->next;
        prior = L;
        free(p);
        if (L && L->data == e)	//观察表头的下一元素是不是e
            del_recursion(L, NULL, e);
        else {
            del_recursion(L,prior,e);
        }
    } else if (L->data == e && prior != NULL) {
        p = L;
        prior->next = L->next;
        L=L->next;
        free(p);
        del_recursion(L,prior,e);

    } else {
        prior = L; //
        del_recursion(L->next,prior, e);
    }
    return L;
}

用来遍历的代码:

void print_LinkList(LinkList L) {
    if (L->next == NULL) {
        return;
    }

    LNode *index;
    index = L;


    while (index != NULL) {

        printf("%d ", index->data);

        index = index->next;
    }
}

运行结果:
递归去除线性表(链表)元素

上一篇:JUC练习14——异步回调


下一篇:简单了解 Interferometry 干涉测量技术