# 节点类
class Node:
def __init__(self, v=None, next=None):
self.nextNode = next
self.value = v
# 链表类
class LinkedList:
def __init__(self):
self.__head = Node() # 头节点 私有对象属性
self.__lens = 0 # 维护链表长度 私有对象属性
# 头插节点
def add(self, v):
node = Node(v)
node.nextNode = self.__head.nextNode
self.__head.nextNode = node
self.__lens += 1
# 尾插节点
def append(self, v):
tail = self.__head
while tail.nextNode is not None:
tail = tail.nextNode
node = Node(v, None)
tail.nextNode = node
self.__lens += 1
# 指定位置插入数据 以0开始计数
def insert(self, index, v):
if index <= 0:
self.add(v)
elif index > self.__lens - 1:
self.append(v)
else:
node = Node(v)
pre = self.__head
while index > 0:
pre = pre.nextNode
index -= 1
node.nextNode = pre.nextNode
pre.nextNode = node
self.__lens += 1
# 根据值移除某个元素
def remove(self, key):
pre = self.__head
while pre.nextNode is not None:
if pre.nextNode.value == key:
pre.nextNode = pre.nextNode.nextNode
else:
pre = pre.nextNode
# 根据位置 删除节点 0初始
def delete(self, index):
if index > self.__lens - 1 or index < 0:
print("输入无效!")
return
pre = self.__head
while index > 0:
pre = pre.nextNode
index -= 1
pre.nextNode = pre.nextNode.nextNode
self.__lens -= 1
# 获取链表长度
def size(self):
return self.__lens
# 清空链表, 简便写法,需要循环赋值None
def clear(self):
self.__head = Node()
self.__lens = 0
# 判断链表是否为空
def is_empty(self):
return self.__lens is 0
# 打印链表
def print_list(self):
print("链表遍历:", end="")
tail = self.__head.nextNode
while tail is not None:
print(tail.value, end=" ")
tail = tail.nextNode
print()
# 寻找某个节点
def find(self, key):
tail = self.__head.nextNode
while tail is not None:
if tail.value == key:
return True
return False
用python写单链表
最新推荐文章于 2022-10-27 21:35:31 发布