刚学数据结构请检查一下

可不可以帮我检查一下哪里写错或者想复杂了,有没有更优化的写法。我的很久都运行不出来……

double avgListX(LinkList L, ElemType x) //统计单链表中比x大的元素平均值,并返回
{
    int i,num=0,sum=0;
    LinkList p;
    p=L->next;
    if(p==NULL)
    {
        return 0;
    }
    else
    {
        while(p!=NULL)
        {
            if(p->data> 60)
            {
                num++;
                sum+=p->data;
            }
        }
        if(num > 0)
            printf("%.1f\n",sum*1.0/num);
        else
            printf("0");
    }
    return sum;
}

你好,你的链表没有向下移动啊,所以一直在循环,我不知道我c写的对不对,但是应该是这样的逻辑

    while(p!=NULL)
    {
        if(p->data> 60)
        {
            num++;
            sum+=p->data;
        }
        p -> p->next;
    }