标签:LinkList 线性表 递归 index recursion next 链表 prior NULL
#王道数据结构线性表:有读者认为直接去掉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;
}
}
运行结果:
标签:LinkList,线性表,递归,index,recursion,next,链表,prior,NULL 来源: https://blog.csdn.net/qq_46221538/article/details/120843782
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。