递归运用于链表的操作

    

        在上学期学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);
 }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值