繁体   English   中英

反转链表中的元素

[英]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_anode_b之间的运算符==将大致执行一个node_a is node_b is比较对象的地址,而不是它们的值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM