提示: 是我尝试去复习的过程中, 思路的步骤, 看起来有点像草稿, 后期如果有空加上文字描述说明我的思考过程
在网上看了一些别的实现思路, 我觉得最难的其实是怎么去 抽象 我们要描述的 链表 等数据结构对象, 把它们根据在 内存中实际的存储方式 进行抽象. 这里最终是抽象成 Node 和 SingleLinkList 两个对象, 前者作为后者的 一个属性, 这属于 面向对象的多态. 最终, 暴露给用户的只是 对数据的操作而不是 Node对象.
中间让我感觉比较绕的是, 根据python中引用的思路, 去理解变量的赋值过程, 也就是说. 让上一个节点指向下一个节点, 本质上是指向的是下一个节点的内存地址.
# *-* coding:utf8 *-*
# class Node(object):
#
# def __init__(self, item=None, next=None):
# self.item = item
# self.next = next
#
#
# class SingleLinkList(object):
#
# def __init__(self, node=None):
# self.node = node
#
# def travel(self):
# while self.node.next is not None:
# print(self.node.item)
#
#
# tail = Node(item=300, next=None)
# node2 = Node(item=200, next=tail.item)
# node1 = Node(item=100, next=node2.item)
# head = Node(next=node1.item)
#
# single_link_list = SingleLinkList(node=head)
# single_link_list.travel()
class Node(object):
def __init__(self, data=None):
"""
初始化操作,构造一个节点
:param data: 当前节点要保存的数据
"""
self.data = data # 节点数据区,要保存的数据
self.next = None # 节点地址区,指向的下一个区域的地址信息; 默认可以设置为None,表示起始没有头信息
class SingleLinkList(object):
"""单向链表(单链表)"""
def __init__(self, head_node=None):
"""对于单链表来说,只需要保存 头节点 的信息即可"""
self.__head = head_node
# 下面实现,单链表中封装的 操作数据的方法
def is_empty(self):
"""链表是否为空"""
# if self.__head is None:
# return True
return self.__head is None
def length(self):
"""链表的长度"""
# 借助两个 辅助变量
cur = self.__head # 初始化游标指向头节点
count = 0 # 初始长度设置为0
while cur is not None:
count +=</