[英]Reverse an element in linked-list
我目前正在学习 Python 中的链表并解决这样的任务
给定一个链表的头部,反转它并返回反转列表的头部。
class Node:
def __init__(self, link=None, val=None):
self.val = val
self.next = link
def reverseLL(head):
reversed_head = Node()
### MY CODE
reversed_head.val = head.next.val
reversed_head.next = head
###
return reversed_head
node2 = Node(None, 5)
node1 = Node(node2, 2)
# check that your code works correctly on provided example
assert reverseLL(node1) == Node(node1, 5), 'Wrong answer'
当我在本地尝试该功能时,我得到了错误的答案。 但是当我通过一些在线评分器检查运行代码时,它会输出:
RuntimeErrorElement(RuntimeError,Error on line 12:
reversed_head.val = head.next.val
AttributeError: 'NoneType' object has no attribute 'next'
正如我在此任务中所了解的,我只需要为 reversed_head 分配 head 的值,并为链接分配相同的值。 我究竟做错了什么?
无需考虑如何反转列表,我可以确保您的assert
将始终失败。 为什么 ?
考虑这篇文章对象相等(`==`)的默认行为在哪里定义?
总而言之,当你定义一个类时,它的两个实例node_a和node_b之间的运算符==
将大致执行一个node_a is node_b
。 is
比较对象的地址,而不是它们的值。
因此,由于您没有覆盖默认的__eq__
,因此两个Node
之间的比较执行is
。
现在在您的断言中,您将函数的结果与新创建的Node(node1, 5)
进行比较。 在任何情况下,这些对象都是可能共享相同值的两个不同实体。 但是作为不同的实体,对它们的 a is
操作将始终评估为 false。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.