标签:param 测试 对象 初始 大于 ret one not 索引
# 节点的实现, 节点类
class SingleNode(object):
"""单链表节点"""
def __init__(self, elem):
"""
一个节点的初始状态
:param elem:
"""
self.elem = elem
self.next = None
# node = SingleNode(100)
# 链表类
class SingleLinkList(object):
"""
单链表的实现
"""
def __init__(self, node=None):
self._head = node
def is_empty(self):
"""链表是否为空"""
return self._head is None
def length(self):
"""链表长度"""
cur = self._head # cur游标,用来移动遍历节点, 初始化为指向头节点
count = 0 # 计录数量
while cur is not None: # 循环数数, 条件为 不是 None
count += 1 #
cur = cur.next # cur游标 移动到下一个节点
# 返回链表的长度数量
return count
def travel(self):
"""遍历整个链表"""
cur = self._head
while cur is not None:
print(cur.elem, end=' ')
cur = cur.next
# if cur is None:
# print('') # 最后一个元素换行
print('')
def add(self, item):
"""链表头部添加元素"""
node = SingleNode(item)
node.next = self._head
self._head = node # 头节点
def append(self, item):
"""链表尾部添加元素"""
node = SingleNode(item)
if self.is_empty(): # 判断链表是否为空
self._head = node
else:
cur = self._head
while cur.next is not None:
cur = cur.next
cur.next = node
def insert(self, index, item):
"""
指定位置添加元素
:param index 从0开始
"""
if index <= 0: # 如果index小于等于0, 则是从头部插入
self.add(item)
elif index > self.length()-1: # 如果index大于单链表的最大索引, 则是 尾插入
self.append(item)
else:
prev = self._head # 上一个节点, 是self._head
count = 0
while count < (index-1):
count += 1
prev = prev.next
# 当循环退出后, prev 指向 (index-1) 的位置
node = SingleNode(item)
node.next = prev.next
prev.next = node
def remove(self, item):
"""删除节点"""
cur = self._head
prev = None
while cur is not None:
if cur.elem == item:
# 先判断此节点是否是头节点
if cur == self._head:
# 是头节点
self._head = cur.next
else:
prev.next = cur.next
break # 删除了就要退出
else:
prev = cur
cur = cur.next
def search(self, item):
"""查找节点是否存在"""
cur = self._head
while cur is not None:
if cur.elem == item:
return True # 找到了
else:
cur = cur.next
return False # 没找到
# 测试
if __name__ == '__main__':
single_link_list = SingleLinkList() # 构建一个空的单链表对象
print(single_link_list.is_empty()) # True, 该单链表是否为空,True为空,否则False
single_link_list.append(2)
single_link_list.add(88) # 在头部添加 88
single_link_list.insert(1, 20) # 指定位置
single_link_list.travel() # 遍历这个单链表
single_link_list.insert(0, 100)
single_link_list.travel() # 遍历这个单链表
single_link_list.insert(20, 500)
single_link_list.travel() # 遍历这个单链表
single_link_list.remove(100)
single_link_list.travel() # 遍历这个单链表
标签:param 测试 对象 初始 大于 ret one not 索引
原文地址:https://www.cnblogs.com/nichengshishaonian/p/11576102.html