为什么我的代码只反转链表的 return 第一个节点?

Why does my code to reverse a Linked List only return the first node?

我正在尝试 reverse a linked list 使用以下代码。我已经在纸上找到了它,它似乎可以工作,但它在大多数测试中都失败了 - 有人可以告诉我哪里出了问题吗?

class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None




def reverseLinkedList(head):
        curr,prev,nex = head,None,head.next
    
        while nex:
            curr.next = prev 
            prev = curr
            curr = nex 
            nex = nex.next 

        return curr

当您的 while 循环退出时,curr.next 仍然是 None,因此它只返回反向 linked-list 的头部。 只要在while循环后面加一行curr.next = prev就可以了。 所以reverseLinkedList函数的代码将是:

def reverseLinkedList(head):
    curr,prev,nex = head,None,head.next
    while nex:
        curr.next = prev 
        prev = curr
        curr = nex 
        nex = nex.next 
    curr.next = prev
    return curr

更好解释的示例:

假设我们的 linked-list 是:1 --> 2 --> 3 代码执行后 linked-list 变为: 1 <-- 2 3 <-- curr 2和3之间没有link,但是你的prev指向的是2。 所以执行一行 curr.next = prev 将生成 linked 列表: 1 <-- 2 <--3 <--curr

可以使用Python的多变量赋值来实现反转(只是要注意变量的顺序):

class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None
        
    def __repr__(self):
        return str(self.value) + (self.next and f"-->{self.next}" or "")

def reverseLinkedList(head):
    newHead = None
    while head:
        newHead,newHead.next,head = head,newHead,head.next
    return newHead

输出:

h = t = LinkedList(1)
for v in range(2,10):
    t.next = LinkedList(v)
    t = t.next
    
print(h)
1-->2-->3-->4-->5-->6-->7-->8-->9

rh = reverseLinkedList(h)
print(rh)
9-->8-->7-->6-->5-->4-->3-->2-->1