为何我实现的Linked List代码在HackerRank报错,本地IDLE运行正常?
链表代码在HackerRank报错的问题分析
我在IDLE里测试这段链表代码时,遍历能得到预期输出,但放到HackerRank上运行就报错,想问问哪里考虑漏了?
我的代码如下:
class Node: def __init__(self,data=None,next_node = None): self.data = data self.next_node = next_node def get_data(self): return self.data def get_next(self): return self.next_node def set_next(self,new_next): self.next_node = new_next class LL: def __init__(self,head=None,tail=None): self.head = head #head self.tail = tail #tail def Insert(self,data): new_node = Node(data) #new_node new_node.set_next(None) if self.head == None: self.head = new_node self.tail = new_node else: self.tail.set_next(new_node) self.tail = new_node
结合HackerRank的在线评测特性,大概率是这几个地方没匹配题目要求:
- 函数/类名的大小写不匹配:Python是大小写敏感的语言,HackerRank的题目会严格指定要实现的类名和方法名。比如很多链表题目要求方法名是小写的
insert,而你写的是Insert;或者要求链表类名为LinkedList而非LL——如果测试用例的代码是按指定名称调用的,找不到对应方法/类就会直接报错。 - 缺少输入输出的处理逻辑:在IDLE里你可能是手动创建链表实例、调用插入方法来测试,但HackerRank需要你读取标准输入的数据(比如先读入要插入的元素数量,再逐个读入元素),执行插入后还要按要求格式输出链表内容。比如你需要补充类似这样的代码:
if __name__ == "__main__": linked_list = LL() # 读取输入 count = int(input()) for _ in range(count): value = int(input()) linked_list.Insert(value) # 遍历输出链表 current = linked_list.head while current: print(current.get_data(), end=' ') current = current.get_next() - 潜在的测试用例适配问题:虽然你的尾部插入逻辑在常规测试下没问题,但有些题目可能会有特殊场景(比如插入空值?不过你的Node初始化支持data=None),但这个概率比较低,优先检查前面两个点。
先把类名和方法名改成题目要求的,再补上输入输出的代码,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者carl
相关产品推荐
相关产品推荐

