鱼C论坛

 找回密码
 立即注册
查看: 2755|回复: 10

[已解决]一个链表的题,没看懂

[复制链接]
发表于 2019-10-14 00:19:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下列函数试图求链式存储的线性表的表长,是否正确?

int  Length ( List  *PtrL )

{    List  *p = PtrL;      

     int  j = 0;

     while ( p ) {

           p++;

           j++;                 

     }   

     return  j;

}

为什么不可以求出链表的长度
最佳答案
2019-10-14 00:38:47
既然是链表,那么在节点中就必然会有一个成员的值是指向下一个节点的指针,假设这个成员名字叫 next
int  Length(List  * PtrL)
{
        List  * p = PtrL      ;
        int j = 0             ;
        while(p) {
                j ++          ;
                p = p -> next ;
        }
        return j              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-14 00:35:41 | 显示全部楼层
“下列函数试图求链式存储的线性表的表长,是否正确?”
答案是:不清楚,不知道
要知道这个问题的答案还需要知道数据结构的定义和数据结构的初始化函数

还有,你为什么就不能把代码贴完整呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 00:37:42 | 显示全部楼层
“为什么不可以求出链表的长度”
不知道,因为我看不到数据结构的定义和数据结构的初始化函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 00:38:47 | 显示全部楼层    本楼为最佳答案   
既然是链表,那么在节点中就必然会有一个成员的值是指向下一个节点的指针,假设这个成员名字叫 next
int  Length(List  * PtrL)
{
        List  * p = PtrL      ;
        int j = 0             ;
        while(p) {
                j ++          ;
                p = p -> next ;
        }
        return j              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 00:42:07 | 显示全部楼层
好吧,我没有认真看题
代码中有一条语句明显就不对
p++; 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 15:22:12 | 显示全部楼层
人造人 发表于 2019-10-14 00:42
好吧,我没有认真看题
代码中有一条语句明显就不对

为什么p++,不对,p++不是使指针指向下一个元素吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 15:23:32 | 显示全部楼层

为什么要把p++改为p=p->next?这里没看懂,p++不就是指向下一个元素吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 16:20:39 | 显示全部楼层
机智如我么么哒 发表于 2019-10-14 15:23
为什么要把p++改为p=p->next?这里没看懂,p++不就是指向下一个元素吗?

       首先,p 作为指针,其值不可能通过步进(增加一个固定值)而成为 0 值,所以,while(p) 基本上会成为死循环;其次,如果学过链表就应该知道,链表是由一系列连在一起的节点构成,从首节点开始,每个节点都必有一个成员是用来存放指下一个节点地址的指针,这样,只要知道首节点地址,通过这条线索,很容易就可以遍历到链表的每一个节点,到最后一个节点的时候,这个指针的数值为 NULL,逻辑值就会是 false,就是说到达尾节点的时候 while(p) 循环就会结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 16:45:06 | 显示全部楼层
jackz007 发表于 2019-10-14 16:20
首先,p 作为指针,其值不可能通过步进(增加一个固定值)而成为 0 值,所以,while(p) 基本上会 ...

你这么一说,我又不懂这个while(p)里面的p为什么不用取值呢?当p->next等于null时,p指向的是p->next的值,直接用while(p)是怎么判断p是0还是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 18:23:48 | 显示全部楼层
机智如我么么哒 发表于 2019-10-14 16:45
你这么一说,我又不懂这个while(p)里面的p为什么不用取值呢?当p->next等于null时,p指向的是p->next的 ...

       感觉目前还无法与你沟通,建议你还是先看看 C 语言中关于结构型变量的内容,先搞清链表以及指针相关的概念,然后再讨论,会比较有共同语言。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 20:07:28 | 显示全部楼层
jackz007 发表于 2019-10-14 18:23
感觉目前还无法与你沟通,建议你还是先看看 C 语言中关于结构型变量的内容,先搞清链表以及指针相 ...

刚才搜了一下说(p)是判断指针是否为空,而(*p)是判断内容是否为空,然后我就懂了,谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 16:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表