为什么我的代码只反转链表的 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
我正在尝试 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