# 创建节点
class Node(object):
def __init__(self,data):
# 每个节点必须有next和data属性,不然不能叫一个节点
self.data = data
self.next = None
# 创建单向链表
class singleLink(object):
# 单向链表初始化
def __init__(self,node = None):
self.__head = node # head私有化
# 单向链表判空
def is_empty(self):
return self.__head is None
# 单向链表长度实现
def length(self):
count = 0
cur = self.__head
while cur:
count += 1
cur = cur.next
return count
# 打印每一个数字,单向链表打印
# 链表刚刚实例化,如果输入值node有节点,则链表长度为1,
# 如果node为None,则链表长度为0
def travel(self):
# 实例化节点
cur = self.__head
# 如果next有节点,就进行计数,并进入下一个循环,
# 如果next为空,就退出循环,以此来达到计数的目的
# 如果self.head没有data和next属性,那就不会进while循环,
# 直接返回链表长度为0,不会报错
# 如果链表长度为0,cur为none,则什么都不会打印
while cur:
print(cur.data, end=' ')
cur = cur.next
print(end='\n')
# 单向链表头部增加
def add(self,data):
node = Node(data)
node.next = self.__head
self.__head = node
# 单向链表尾部增加
def append(self,data):
# 实例化节点
node = Node(data)
# 实例化指针
cur = self.__head
# 空链表
if self.__head == None:
self.__head = node
# 非空链表
else:
while cur.next: #如果cur=None,因此不会执行while语句,while语句判断为假
cur = cur.next # 接续找尾部节点,找到之后退出循环
# 属性修改
cur.next = node
if __name__ == '__main__':
link = singleLink()
print(link.is_empty())
link.add(3)
link.add(6)
link.add(9)
link.append(1)
link.append(2)
link.travel()
print(link.length())
|