节点变量会初始化为None值或者一个新的None对象。
class Node(object):
def __init__(self, data, next=None):
self.data=data
self.next=next
# 仅仅是空链接
node1=None
# 一个包含数据和空链接的节点
node2= Node("A")
# 一个包含数据和链接node2的节点
node3= Node("B", node2)
下图表示在运行该节点之后3个变量的状态:
注意如下情况:
node1没有指向节点对象(是None)。
node2和node3指向所链接到的对象。
node2指向一个对象,其下一个指针为None。
现在,假设你试图运行如下的语句,在已经包含了node2和node3的链接结构的开头位置添加一个节点:
node1.next = node3
python会抛出一个AttributeError作为响应。作出这一响应的原因是,变量node1包含了值None,因此不会引用包含了一个next字段的对象。
要创建我们想要的链接,如下:
node1 = Node("c", node3)
或者,如下:
node1 = Node("c")
node1.next= node3
通常在尝试访问一个给定的节点变量之前。我们可以通过询问其是否为None。从而保证其不发生意外:
if nodeVariable !=None:
像数组一样,链表结构也是用循环来处理的。可以使用循环来创建一个链表结构,并且访问其中的每一个节点。
下面是测试脚本使用了Node类来创建一个单链表结构,并且输出其内容:
# coding: utf-8
class Node(object):
def __init__(self, data, next=None):
self.data=data
self.next=next
head=Nonefor count in range(1,6):
head=Node(count, head)while head !=None:
print head.data
head= head.next
关于这个程序,注意以下几点:
指针head生成了链表结构。这个以这样一种方式操作,最近插入的项总是位于结构的开始处。
因此,当显示数据的时候,他们按照插入时相反的顺序出现。
此外,当显示数据的时候,head指针重新设置为下一个节点直到head指针变为None。因此,这个过程的最后,节点实际上从链表结构中删除了。对于顺序来说,节点不可再用,并且会在下一次垃圾回收的时候回收。
结束!