python 链表中验证内存内容的代码

比如下图:

内存地址假如是 0..235 0..536 0..668 0..772

                           data1    next               data2    next
                        

内存存储内容 100 0x668 230 none

img

我想知道python 链表中,next 存的是下一个元素的内存地址,哪有没有办法通过python代码验证一下呢?

谢谢

简单示例:
class Node(object):
    def __init__(self, value__, next__ = None):
        self.value__ = value__
        self.next__ = next__       
        
    def __str__(self):
        return f'当前节点值{self.value__},内存地址:{hex(id(self))}--->{hex(id(self.next__))}'
        
n1 = Node('n1')
print(n1)
n2 = Node('n2', n1)
print(n2)
n3 = Node('n3', n2)
print(n3)
print(n3.next__)
print(n3.next__.next__)
'''
--result
当前节点值n1,内存地址:0x26aabdcfd30--->0x7fff64d31cd8
当前节点值n2,内存地址:0x26aabdcfcd0--->0x26aabdcfd30
当前节点值n3,内存地址:0x26aabdcfb80--->0x26aabdcfcd0
当前节点值n2,内存地址:0x26aabdcfcd0--->0x26aabdcfd30
当前节点值n1,内存地址:0x26aabdcfd30--->0x7fff64d31cd8
'''

# 链表节点
class Node:

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


# 在链表开头插入一个节点数据
def push(head_ref, new_data):
    # 分配节点
    new_node = Node(0)

    # 放入节点的数据
    new_node.data = new_data

    # 在末尾连接新节点
    new_node.next = head_ref

    # 移动头部以指向新节点
    head_ref = new_node

    return head_ref


# 打印链表
def printList(head):
    if (head == None):
        return

    while (head.next != None):
        print(head.data, " -> ", end="")
        head = head.next

    print(head.data)



head = None

# 创建链表
head = push(head, 10)
head = push(head, 7)
head = push(head, 12)
head = push(head, 8)
head = push(head, 9)
head = push(head, 2)



printList(head)

print(id(head))

print(head.data)  # 第一个元素

head = head.next  # 指向下一个元素地址

print(id(head), head.data)

head = head.next

print(id(head), head.data)



运行结果截图

img

参考代码如下

 
# 定义节点
class Node():
    # 初始化
    def __init__(self, value):
        # value存放数据元素
        self.value = value
        # next是下一个节点的标识
        self.next = None


# 定义链表(单向链表)
class SingleLinkList(object):
    # 初始化
    def __init__(self):
        self._head = None

    # 遍历链表
    def items(self):
        current = self._head
        while current is not None:
            yield current.value
            current = current.next

    # 向链表头部添加元素
    def insert_head(self, value):
        new_node = Node(value)
        new_node.next = self._head
        self._head = new_node

    # 尾部添加元素
    def append(self, value):
        new_node = Node(value)
        if self.is_empty():
            self._head = new_node
        else:
            current = self._head
            while current.next is not None:
                current = current.next
            current.next = new_node


if __name__ == "__main__":
    link_list = SingleLinkList()
    node1 = Node(1)
    node2 = Node(2)
    link_list._head = node1
    node1.next = node2
    print('第一个元素的值',link_list._head.value)
    print('第二个元素的值',link_list._head.next.value)
    print(link_list._head)
    print(node1.next)
    print(node2)
    print(link_list._head.next)