您的位置 首页 设计

单向链表根本操作的递归完成

这几天正在复习一些基本的算法和实现,今天看了看递归的基本原理,发现自己对递归还不是特别清楚,特别是不清楚递归的思想,不能很准确的把

这几天正在温习一些根本的算法和完成,今日看了看递归的根本原理,发现自己对递归还不是特别清楚,特别是不清楚递归的思维,不能很精确的掌握先分解成小事情,在兼并的思维,其实也是数学概括法的程序表现,其实数学概括法是一种强壮的办法,记住高中的时分最喜欢做的标题便是数学概括方面的证明,现在想过来很多问题我不能选用这种方法考虑,可见常识真的是有联络的,仅仅咱们没有找到联络的方法罢了。

为了了解递归的思维,我尝试了选用递归的方法完成单向链表的根本操作。单向的链表是C言语课程中接触到的中比较杂乱的数据结构,可是他的确其他数据结构的根底,在一般情况下都是选用迭代的方式完成,迭代的方式比较递归要节省时间和空间,可是代码相对来说要杂乱,递归往往仅仅简略的几句代码,我首要是为了了解迭代,并不在功能上进行剖析。

根本的完成如下所示:

#include
#include

typedef struct listnode
{
int val;
struct listnode *next;
}List;

/*计算节点个数*/
int count_listnode(List *head)
{
static int count = 0;

if(NULL != head)
{
count += 1;
if(head->next != NULL)
{
count_listnode(head->next);
}

return count;
}
}

/*次序打印*/
void fdprint_listnode(List *head)
{
if(NULL != head)
{
printf(“%d “,head->val);
if(head->next != NULL)
{
fdprint_listnode(head->next);
}
}
}
/*反向打印*/
void bkprint_listnode(List *head)
{
if(head != NULL)
{
if(head->next != NULL)
{
bkprint_listnode(head->next);
}

printf(“%d “,head->val);
}
}
/*删去一个节点的数据为d的节点*/
List *delete_node(List * head, int d)
{
List *temp = head;

if(head != NULL)
{
if(head->val == d)
{
temp = head;
head = head->next;
free(temp);
temp = NULL;
}
else
{
temp = head->next;
if(temp != NULL)
{
temp = delete_node(temp,d);
head->next= temp;
}
}
}

return head;
}

/*删去一切val = d的节点*/
List* delete_allnode(List *head, int d)
{
List *temp = head, *cur = head;
if(head != NULL)
{
/*假如第一个便是需求删去的目标*/
if(cur->val == d)
{
temp = cur;
cur = cur->next;
free(temp);
temp = NULL;
temp = delete_allnode(cur, d);
head = temp;
}
else /*不是删去的目标*/
{
cur = head->next;
temp = delete_allnode(cur, d);
/*将得到的链表连接到检测的区域*/
head->next= temp;
}
}
return head;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/317764.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部