单链表python中没有实现
单链表由两部分组成:数据+下一个节点的地址
python实现:节点类+单链表操作类。item存放数据,next存放下一个节点的实例化对象
class Node(object):
"""创建节点类"""
def __init__(self, item):
# item存放数据
self.item = item
# 指向后继节点,新节点默认为None
# 下一个节点对象
self.next = None
class SingleLinklist(object):
def __init__(self):
# 创建指向头节点的变量
self.__head = None
def is_empty(self):
"""链表是否为空"""
return self.__head == None
def length(self):
"""链表长度"""
if self.is_empty():
return 0
else:
# 创建cur游标,指向头节点
cur = self.__head
# 创建计数器
counter = 0
while cur is not None:
# 计数器累加
counter += 1
# 将游标指向下一个节点
cur = cur.next
# 循环结束统计长度完成
return counter
def travel(self):
"""遍历整个链表"""
if self.is_empty():
return
else:
# 创建cur游标,指向头节点
cur = self.__head
while cur is not None:
# 打印节点中存储的数据
print(cur.item, end=' ')
# 将游标指向下一个节点
cur = cur.next
print()
def add(self, item):
"""链表头部添加元素"""
node = Node(item)
if self.is_empty():
self.__head = node
else:
# 让新节点的next指向旧有的头节点
node.next = self.__head
# 让__head指向新节点,使其成为新的头节点
self.__head = node
def append(self, item):
"""链表尾部添加元素"""
node = Node(item)
if self.is_empty():
self.__head = node
else:
# 找到尾节点
cur = self.__head
while cur.next is not None:
# 只要不为尾节点就不断移动游标
cur = cur.next
# 当循环结束,cur指向旧的尾节点
cur.next = node
def insert(self, pos, item):
"""指定位置添加元素"""
if pos <= 0:
self.add(item)
elif pos >= self.length():
self.append(item)
else:
cur = self.__head
ind = 0
node = Node(item)
while ind < pos -1:
ind += 1
cur = cur.next
# 当循环结束之后,cur指向待插入位置的前一个节点
node.next = cur.next
cur.next = node
def remove(self, item):
"""删除节点"""
if self.is_empty():
return
else:
# 创建用于查找待删除节点的游标
cur = self.__head
# 创建用于记录待删除节点前驱节点的游标
pre = None
while cur is not None:
if cur.item == item:
if cur == self.__head:
self.__head = cur.next
else:
pre.next = cur.next
break
else:
# 记录当前节点,cur移动之后将会成为前驱节点
pre = cur
# 移动cur,去检查下一个节点是否是要删除的节点
cur = cur.next
def search(self, item):
"""查找节点是否存在"""
cur = self.__head
while cur is not None:
if cur.item == item:
return True
else:
cur = cur.next
return False
if __name__ == '__main__':
sll = SingleLinklist()
print(sll.is_empty())
print(sll.length())
sll.add(1)
sll.add(2)
sll.add(3)
sll.add(4)
print(sll.is_empty())
print(sll.length())
sll.travel()
sll.append(1)
sll.append(2)
sll.append(3)
sll.append(4)
sll.travel()
sll.insert(-100, 666)
sll.travel()
sll.insert(5, 666)
sll.travel()
sll.insert(100, 666)
sll.travel()
sll.remove(666)
sll.travel()
sll.remove(666)
sll.travel()
sll.remove(666)
sll.travel()
print(sll.search(100))
print(sll.search(1))