"""
链表基本操作:创建空链表,删除链表,判断是否为空,添加元素,删除元素,遍历,定位,链表长度
"""
class Node:
"""链表节点初始化"""
def __init__(self, item):
self.item = item
self._next = None
class LinkList:
"""链表及其相关操作"""
def __init__(self):
self._head = None
def is_empty(self):
"""判断是否为空链表,头节点为None则是空"""
return self._head is None
def length(self):
"""求链表的长度"""
p = self._head
count = 0
while p:
count += 1
p = p._next
return count
def append(self, item):
"""向链表尾部添加元素, 考虑是否是空链表"""
node = Node(item)
p = self._head
if not p:
self._head = node
else:
while p._next:
p = p._next
p._next = node
def add(self, item):
"""向链表头部插入元素"""
node = Node(item)
node._next = self._head
self._head = node
def insert(self, position, item):
"""向链表中插入元素"""
# 头插 or 尾插 or 中间插入
if position <= 0:
self.add(item)
elif position >= self.length():
self.append(item)
else:
pre = self._head
count = 0
while count < position - 1:
count += 1
pre = pre._next
node = Node(item)
node._next = pre._next
pre._next = node
def get_item(self, position):
"""获取某位置的元素"""
if position < 0 or position >= self.length():
return None
p = self._head
count = 0
while count != position:
p = p._next
count += 1
return p.item
def exixt_value(self, item):
"""某个值是否存在"""
p = self._head
while p:
if p.item == item:
return True
else:
p = p._next
return False
def remove(self, item):
"""删除元素"""
p = self._head
pre = None
while p:
if p.item == item:
# 是否头节点
if not pre:
self._head = p._next
else:
pre._next = p._next
break
else:
pre = p
p = p._next
def clear(self):
"""删除链表"""
self._head = None
def travel(self):
"""列表遍历"""
p = self._head
while p:
print(p.item, end=" ")
p = p._next
print()
if __name__ == '__main__':
linklist = LinkList()
linklist.append(2)
linklist.append(3)
linklist.append(4)
linklist.append(5)
print(linklist.length()) # 4
linklist.travel() # 2 3 4 5
linklist.add(1)
linklist.add(0)
linklist.travel() # 0 1 2 3 4 5
linklist.insert(2, 8)
linklist.insert(2, 9)
linklist.travel() # 0 1 9 8 2 3 4 5
print(linklist.get_item(2), linklist.get_item(12), linklist.get_item(4)) # 9 None 2
print(linklist.exixt_value(9), linklist.exixt_value(20)) # True False
linklist.remove(9)
linklist.remove(5)
linklist.travel() # 0 1 8 2 3 4
linklist.clear()
linklist.travel() # 空
算法 链表的基本操作
最新推荐文章于 2024-07-15 15:37:59 发布