在上学期学c的时候就已经接触过递归的思想,但是对递归仍旧不了解,不知道递归究竟有什么方便之处,后来经过查资料,看书,感觉递归既有利也有弊,有时候它会浪费一定的空间时间,但是他最大的优点就是他能够令代码简洁不少,用别人的一句话递归就是我完成最简单的那一步,其他难的相似问题就找别人做吧。不得不说,递归确实是思考问题的一种方式。
问题描述:链表的基本操作是一个基本需要掌握的知识,但是他的各种操作代码繁琐,我们就可以利用递归实现,代码就简洁了很多。
代码实现(主要的算法思想)
//递归实现链表的基本操作
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
struct node *next;
}lnode;
void creat(lnode *head) //链表的创建
{
lnode *l=(lnode *)malloc(sizeof(lnode));
scanf("%d",l->a);
if(n->a)
{
head->next=l;
head=l;
creat(head);
}
else
{
head->next=NULL;
free(l);
}
}
int count_lnode(lnode *head) //统计节点的个数
{
int count=0;
if(head!=HULL)
{
count+=1;
if(head->next!=NULL)
{
count_lnode(head->next);
}
return count;
}
}
void print_lnode(lnode *head) //打印链表
{
if(NULL!=head)
{
printf("%d",head->a);
if(head->next!=NULL)
{
print_lnode(head->next);
}
}
}
void de_lnode(lnode *head, int x) //删除节点
{
lnode *p;
if(head->next)
{
if(head->next->a=x)
{
p=head->next;
head->next=p->next;
free(p);
de_lnode(head,x);
}
else
{
de_lnode(head->next,x);
}
}
}