Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中反转单个链接列表。。。我想我';我误解了python如何处理引用_Python_Reference_Linked List - Fatal编程技术网

在python中反转单个链接列表。。。我想我';我误解了python如何处理引用

在python中反转单个链接列表。。。我想我';我误解了python如何处理引用,python,reference,linked-list,Python,Reference,Linked List,我只是在尝试我认为是一个相当简单的问题,但在编写过程中,我似乎遇到了一些困难。下面是代码。。。“my_reverse”函数是我如何编写的,我似乎无法理解它为什么不起作用(尽管我确信错误相当简单)。函数“reverse”是我在网上找到的一些代码,它确实有效。看来我们的方法很相似。另外,在while循环中,当您设置nxt=current.nxt,然后设置current.nxt=last时,这不是使nxt.nxt=last吗 class Node: def __init__(self, val

我只是在尝试我认为是一个相当简单的问题,但在编写过程中,我似乎遇到了一些困难。下面是代码。。。“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


当你设置
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
。好吧,我想我明白了。谢谢。当您设置
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
。好吧,我想我明白了。谢谢