【发布时间】:2013-11-29 19:49:53
【问题描述】:
我只是在尝试我认为是一个相当简单的问题,但在编写它时我似乎遇到了一些困难。下面是代码......函数'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)
【问题讨论】:
-
当你设置
nxt = current.nxt,然后设置current.nxt = last,这不是nxt.nxt = last吗?。不,因为你 重新绑定current.nxt。nxt不遵循重新绑定。 -
我明白了。那么列表有例外吗?因为我知道如果你设置 a = [1, 2],然后设置 b = a,然后执行 b.append(3),a 现在将是 [1, 2, 3]。还有其他例外吗?
-
这完全不同。然后,您将复制对同一对象的引用并更改对象本身。但是,如果您随后执行
b = c,那么a也不会突然指向c。 -
好吧,我想我明白了。谢谢。
标签: python reference linked-list