您的位置:首页 > 其它

递归运用于链表的操作

2014-10-12 12:58 169 查看
在上学期学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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: