#王道数据结构线性表:有读者认为直接去掉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;
}
}
运行结果: