hutods
hutods
采纳率100%
2015-12-12 11:40

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

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • lm_whales lm_whales 6年前

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

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

    点赞 评论 复制链接分享
  • lm_whales lm_whales 6年前

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

    点赞 评论 复制链接分享
  • lm_whales lm_whales 6年前

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

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

    点赞 评论 复制链接分享
  • zzh_569754126 Henry Zheng 6年前

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

    点赞 评论 复制链接分享
  • pkohd pkohd 6年前

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

    点赞 评论 复制链接分享