Python - C 风格链表实现

Python - C style Linked List implementation

我有以下代码,我正在尝试实现插入功能(没有任何 OOP 技术)。 输出是 1。 这基本上意味着变量 root 没有作为引用传递。 有什么具体的方法,我可以做到吗? 其次,我可以使用一个单独的链表class来实现它,这样我的根节点对于每个链表class对象都是唯一的,我就不会有根被错误处理的问题。

能否请您提出建议,我该如何通过以下方式实现它:-

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

def insert(root, data):
    temp = root
    root = Node(data)
    root.next = temp

root = Node(1)
insert(root, 2)
print(root.data)

然而,然后我实现了以下代码,显然它可以工作,但我希望上面的代码能够工作:-

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


class LinkedList:
    def __init__(self):
        self.root = None

    def insert(self, data):
        temp = self.root
        self.root = Node(data)
        self.root.next = temp

ll = LinkedList()
ll.insert(5)
ll.insert(6)
print(ll.root.data)

最简单的方法是让 insert() return 新的 root

def insert(root, data):
    temp = root
    root = Node(data)
    root.next = temp

    # Now we return the new root.
    return root

测试

>>> root = Node(1)

>>> # the root is updated with the new object returned by the insert
>>> root = insert(root, 2)

>>> #This will return the new root.data
>>> print(root.data)
2

赋值给root不会修改root指向的对象,但仍然可以修改root的属性:

def insert(root, data):
    # Clone the old root
    old_root = Node(root.data)
    old_root.next = root.next

    # Overwrite with the "new" root and link the old one
    root.data = data
    root.next = old_root