Python 方法未就地修改

Python method not modifying in place

我正在尝试在 Python 中从头开始实现链表 class,我遇到了一个问题,该问题可能与 Python 的工作方式有关,但我想确定一下。

这里是我实现的基础:

class Node(object):
    def __init__(self, data=None, next=None):
        self.next = next
        self.data = data

    def appendToTail(self, d: int):
        newNode = Node(d)
        while self.next is not None: self = self.next
        self.next = newNode

class 方法无法正常工作:

    def reverse(self):
        prevNode = None
        currentNode = self # current = 1
        while self is not None:
            nextNode = self.next
            self.next = prevNode
            prevNode = self
            self = nextNode
        self = prevNode

我试图就地反转链表,但是当我调用这个方法时,链表似乎是空的。 我还实现了这个方法的另一个版本,它在最后预制了一个 return self ,返回的列表确实是我正在寻找的正确结果:

def reverseNotInPlace(n: Node()) -> Node():
    prevNode = None
    n = n.next
    while n is not None:
        nextNode = n.next
        n.next = prevNode
        prevNode = n
        n = nextNode
    return prevNode

总结:

# creating a linked list such as: [1 -> 2 -> 3]
myList = Node()
myList.appendToTail(1)
myList.appendToTail(2)
myList.appendToTail(3)

# inverting it not in place works
invList = reverseNotInPlace(myList)
# returns [3 -> 2 -> 1]

myList.reverse()
# returns only the first node of myList()

所以我的问题是:我的实现有问题吗?还是我正在尝试做的事情完全不可能?

非常感谢!

您的第一种方法存在逻辑错误。您的节点 class 不能有反向方法。因为反转节点实际上没有任何意义。事实上,反转 link 列表确实有意义。

所以最好把你的代码分成两部分:

  1. 你的节点class有一个构造函数来初始化一个节点
  2. 一个 linked 列表 class 具有将节点附加到末尾和反转 linked 列表的功能。还将 linked 列表的头部传递给这两个函数