比如下图:
内存地址假如是 0..235 0..536 0..668 0..772
data1 next data2 next
内存存储内容 100 0x668 230 none
我想知道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)
运行结果截图
参考代码如下
# 定义节点
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)