我只是在尝试一个我认为相当简单的问题,但在编码过程中我似乎遇到了一些困难。下面是代码...函数“my_reverse”是我对它进行编码的方式,我似乎无法弄清楚为什么它不起作用(尽管我确信这个错误相当简单)。 “reverse”函数是我在网上找到的一些代码,它确实有效。看来我们的方法很相似。另外,在 while 循环中,当您设置 nxt = current.nxt,然后设置 current.nxt = last,这不是使 nxt.nxt = last 吗?
class Node:
def __init__(self, val, nxt):
self.val = val
self.nxt = nxt
def my_reverse(n):
if (n.nxt is None):
return n
prev = n
curr = n.nxt
while (curr is not None):
nxt = curr.nxt
curr.nxt = prev
prev = curr
curr = nxt
return prev
def reverse(n):
last = None
current = n
while (current is not None):
nxt = current.nxt
current.nxt = last
last = current
current = nxt
return last
def traverse(n):
iter = n
while iter != None:
print iter.val
iter = iter.nxt
n0 = Node(4, None)
n1 = Node(3, n0)
n2 = Node(2, n1)
n3 = Node(1, n2)
traverse(n3)
l = my_reverse(n3)
traverse(l)
最佳答案
我认为你的方法很好,只是你忘记终止链表了。
更改:
prev = n
curr = n.nxt
至
prev = n
curr = n.nxt
n.nxt = None
并且它有效。
关于python - 在 python 中反转单链表...我想我误解了 python 如何处理引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292507/