hutods
2015-12-12 11:40
采纳率: 100%
浏览 4.0k
已采纳

用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。

用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • lm_whales 2015-12-12 11:58
    已采纳

    如果链表有环,永远算不出来
    只能假定,这个链表不是环形链表,也没有环
    简单事情用递归做是低效率的,即便学习递归,也是不必要的

    递推,
    可以用递归实现
    也可以用迭代实现
    前者无循环,后者有

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • pkohd 2015-12-12 12:01

    int listLength(List *l)
    {
    if(l->next!=NULL)
    {
    l=l->next;
    return listLength(l)+1
    }
    return 1;
    }

    评论
    解决 无用
    打赏 举报
  • Henry Zheng 2015-12-12 13:23

    你这有点投机取巧了,有需要的话,可以看一下我的博客中,有单链表相关问题,并且由代码分析.

    评论
    解决 无用
    打赏 举报
  • lm_whales 2015-12-12 13:57

    ///环形链表
    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);
    }

    非环形链表,正常应该是无环的
    如果有环,先判断一下再求好了

    评论
    解决 无用
    打赏 举报
  • lm_whales 2015-12-12 14:01

    ///环形链表,修改一下
    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);
    }

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题