2024-1-2,卡码网第14题链表的基础操作 II
目录
1. 题目描述
承接上题,这次的实现目标是要在能够构建一个正常使用的单链表的基础上,实现查询指定节点的值的功能。
如上图,如何在给定链表(第一行)后,使用第二行提供的数字,找到该数字代表的指定节点的值。这道题考察能否在类中增加新功能,并且在主函数中调用该功能。
2. 代码实现
首先,和上一题一样,创建一个能够正常使用的单链表;然后根据题目描述,可以选择直接在主函数中写代码来实现查询指定节点,也可以通过在链表类中增加一个新功能实现查询指定节点的值。本文使用第二种方法,在链表类中加入新函数get来实现查询链表指定节点的值。因为,这样就能够多次调用,减少重复代码次数。而链表创建全部代码就不放出,因为上一篇已经讲过了。
链表的构建http://t.csdnimg.cn/U7fjC
新定义get函数,并且具有数字n这个属性,n即为外部提供的链表中第n个节点。如何实现查询这个功能,首先需要考虑n的大小是否超过链表长度或者小于0的情况,检验通过后才能进行查询,查询思路就是在for循环中一个一个按链表顺序迭代节点,直到 i 和 n 相等,即找到了指定的节点。最后需要加一句‘return None’来把不满足上述条件的所有情况统统去除。最后只需要调用该函数就能查找了。
3. 总结
此题与上一篇链表的创建相比,只是增加了查询这个功能,如何在创建类中定义新功能实现题目目标是本题考查的关键。
那么,在我写这道题的过程中,我个人认为需要注意的地方仍然是定义链表时的种种细节。上一篇也有讲到,这里再补充一点。
在尝试找到链表末尾的代码中,第二行赋值currentnode时,
currentnode = self.headnode.next
应该改为
currentnode = self.headnode
因为,虽然头节点已经判断不为空了,但是并不知道头节点的下一个节点是否为空。
本人所用代码编辑器为 VS Code,刷题网站为卡码网