反转链表中的元素



我目前正在学习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和link分配头部的值。我做错了什么?

不考虑如何反转列表,我可以确保您的assert总是失败。为什么?

考虑这篇文章在哪里为对象相等(' == ')定义的默认行为?

总而言之,当定义一个类时,它的两个实例node_a之间的操作符==node_b将大致执行node_a is node_bis比较对象的地址,而不是它们的值。

因此,由于您没有覆盖默认的__eq__,因此两个Node之间的比较执行is

现在在断言中,将函数的结果与新创建的Node(node1, 5)进行比较。在任何情况下,对象两个不同的实体,可以共享相同的值。但是作为不同的实体,对它们执行is操作的结果总是false。

最新更新