Python 我不知道';我不明白为什么这两个类输出不同的东西

Python 我不知道';我不明白为什么这两个类输出不同的东西,python,class,linked-list,Python,Class,Linked List,我不明白为什么这些几乎相同的类使用几乎相同的函数输出不同的东西。 它们都应该通过将它们作为链表读取来返回一个反向数组。 第一个输出反向数组,但第二个输出内存位置 我希望下面的第二个类像第一个类一样输出反向数组 # Definition for singly-linked list. class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next cl

我不明白为什么这些几乎相同的类使用几乎相同的函数输出不同的东西。
它们都应该通过将它们作为链表读取来返回一个反向数组。
第一个输出反向数组,但第二个输出内存位置

我希望下面的第二个类像第一个类一样输出反向数组

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def isPalindrome(self, head):
        vals = []
        while head:
            vals += head.val,
            head = head.next
        return vals[0][::-1]

head = [1,2,3,4,5]
Solution().isPalindrome(ListNode(head))  
输出
[5,4,3,2,1]

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def isPalindrome(self, head):
        prev = None
        while head:
            curr = head
            head = head.next
            curr.next = prev
            prev = curr
        return prev  

head = [1,2,3,4,5]
Solution().isPalindrome(ListNode(head))  

输出您的第一个实现基本上什么都不做。唯一与列表相反的代码行是:

vals[0][::-1]
因为通常给出一个列表:

some_list = [1,2,3,4]
print(some_list[::-1]) # prints [4, 3, 2, 1]
因此,
ListNode
类是无用的,而另一个类也是无用的。您只需创建一个
ListNode
谁的值就是整个列表

在第二个实现中,您使用这些类,最后只返回一个节点,这就是您打印的内容


您应该遍历生成的链表,并在移动时组成要打印的列表或打印元素。

这是因为您返回了一个ListNode实例。打印为

要打印已反转的链表,您需要额外的步骤来打印已反转的链表

还要注意,您的测试代码是错误的
head=[1,2,3,4,5]
和do
ListNode(head)
未创建有效的链接列表。它仅使用val
[1,2,3,4,5]

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def isPalindrome(self, head):
        prev = None
        while head:
            curr = head
            head = head.next
            curr.next = prev
            prev = curr
        
        l = []
        while prev is not None:
            l.append(prev.val)
            prev = prev.next
        return l

# This creates a valid linked list for testing
head = ListNode(1)
cur = head
for i in range(2, 6):
    cur.next = ListNode(i)
    cur = cur.next
    
Solution().isPalindrome(head) 

因为一个输出值列表,另一个输出ListNode实例?为什么希望
return prev
返回列表而不是
ListNode
?使用
\u str\u(self):
\u repr\u(self):
on
ListNode
为您自己的输出设置样式:请注意,您的两个版本都没有将Python列表转换为其元素的链接列表。您只需要创建一个带有一个元素的链表,其值是Python列表。
[5, 4, 3, 2, 1]