用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。
如果链表有环,永远算不出来
只能假定,这个链表不是环形链表,也没有环
简单事情用递归做是低效率的,即便学习递归,也是不必要的
递推,
可以用递归实现
也可以用迭代实现
前者无循环,后者有
int listLength(List *l)
{
if(l->next!=NULL)
{
l=l->next;
return listLength(l)+1
}
return 1;
}
你这有点投机取巧了,有需要的话,可以看一下我的博客中,有单链表相关问题,并且由代码分析.
///环形链表
int cycleListLength(Node *p,Node *head){
if(p==NULL || head==NULL)return 0;
if(p ==head && p->next =head )return 0;
else if(p->next =head)return 1;
return 1+ cycleListLength(p,Head);
}
///带都节点链表
int ListWithHeadLength(Node *p){
if(p==NULL)return 0;
if(p->next==NULL)return 0;
return 1+ ListWithHeadLength(p->next);
}
///不带头节点链表
int ListWithOutHeadLength(Node *p){
if(p==NULL)return 0;
return 1+ ListWithOutHeadLength(p->next);
}
非环形链表,正常应该是无环的
如果有环,先判断一下再求好了
///环形链表,修改一下
int cycleListLength(Node *p,Node *head){
if(p==NULL || head==NULL)return 0;
if(p ==head && p->next =head )return 1;
if(p->next =head)return 2;
return 1+ cycleListLength(p,Head);
}