用C语言编写一个使用递归算法实现删除单链表中值为X的第一个节点与所有节点?

两个函数,删除第一个节点与所有节点,谢谢!... 两个函数,删除第一个节点与所有节点,谢谢! 展开
 我来答
Shadow_Legend
2013-11-13 · TA获得超过205个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:161万
展开全部
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;
struct node* next;
}Lnode;
Lnode *head=NULL;
Lnode *tail=NULL;
void create()
{
head = (Lnode*)malloc(sizeof(Lnode));
tail = head;
if(head!=NULL)
{
printf("please input data: ");
scanf(" %c",&head->data);
head->next=NULL;
}
}
void delFirst(Lnode *pre ,Lnode *ptr,char x) //递归删除第一个 = x
{
if(ptr==NULL)
return;
if(pre==NULL && ptr->data == x)
{
head=ptr->next;
ptr->next = NULL;
free(ptr);
ptr=NULL;
return;
}
if(pre!=NULL && ptr->data == x)
{
pre->next = ptr->next;
ptr->next = NULL;
free(ptr);
ptr = NULL;
return;
}
pre = ptr;
ptr = ptr->next;
delFirst(pre,ptr,x);
}
void delAll() //递归删除所有
{
Lnode * tmp=NULL;
if(head==NULL)
return;
if(head->next!=NULL)
{
tmp = head->next;
free(head);
head=tmp;
delAll();
}
else
{
free(head);
head=NULL;
}
}
void insert()
{
if(tail == NULL)
return;
tail->next = (Lnode*)malloc(sizeof(Lnode));
if(tail->next != NULL)
{
printf("please input data: ");
scanf(" %c",&(tail->next->data));
tail=tail->next;
tail->next=NULL;
}
}
void print()
{
Lnode* tmp =head;
if(head==NULL)
printf("no data\n");
while(tmp!=NULL)
{
printf("%c ",tmp->data);
tmp=tmp->next;
}
}
void lfree() //非递归删除
{
Lnode* tmp=NULL;
while(head!=NULL)
{
tmp=head;
head=head->next;
free(tmp);
}
}
void main()
{
int i=0;
create();
for(i=0; i<5; i++)
{
insert();
}
delFirst(NULL,head,'1');
print(head);
delAll();
print(head);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3bb4b85
2013-11-13 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:32.6万
展开全部
这用不着递归吧
追问
作业要求,别无选择啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式