class Node:
def __init__(self, elem):
self.elem = elem
self.next = None
class SingleChain:
def __init__(self, node=None):
self.__head = node
def is_empty(self):
return self.__head == None
def length(self):
cnt = 0
if not self.is_empty():
pointer = self.__head
while pointer:
cnt += 1
pointer = pointer.next
return cnt
def throughout(self):
if self.is_empty():
print('没有元素')
else:
pointer = self.__head
while pointer:
print(pointer.elem, end=" ")
pointer = pointer.next
print()
def append(self, val):
node = Node(val)
if self.is_empty():
self.__head = node
else:
pointer = self.__head
while pointer.next:
pointer = pointer.next
pointer.next = node
def insert(self, idx: int, item):
node = Node(item)
if self.is_empty():
self.__head = node
else:
n = self.length()
if idx <= 0:
node.next = self.__head
self.__head = node
elif idx >= n:
self.append(item)
else:
cnt = 0
pointer = self.__head
while pointer:
cnt += 1
if cnt != idx:
pointer = pointer.next
else:
p = pointer.next
pointer.next = node
node.next = p
break
def find(self, item):
if self.is_empty():
print('链表为空')
else:
l = self.length()
pointer = self.__head
for i in range(l):
if pointer.elem == item:
print('exist')
break
else:
pointer = pointer.next
else:
print('no exist')
def pop(self, idx: int = None):
if not self.is_empty():
pointer = self.__head
n = self.length()
if isinstance(idx, int):
if idx > 0:
for i in range(n):
if i != idx - 1:
pointer = pointer.next
else:
pointer.next = pointer.next.next
break
else:
self.__head = pointer.next
else:
for i in range(n):
if i != n - 2:
pointer = pointer.next
else:
pointer.next = None
break
else:
print('无元素可删除')
测试
sc = SingleChain()
print(sc.is_empty())
print(sc.length())
sc.throughout()
print('-' * 16)
sc.append(1)
print(sc.length())
print(sc.is_empty())
print('-' * 16)
sc.append(2)
sc.append(3)
sc.throughout()
print('-' * 16)
sc.find(2)
print('-' * 16)
sc.insert(3, 4)
sc.insert(0, 0)
sc.throughout()
print('-' * 16)
sc.insert(2, 10)
sc.throughout()
print('-' * 16)
sc.pop()
sc.throughout()
print('-' * 16)
sc.pop(2)
sc.throughout()
print('-' * 16)
sc.pop(0)
sc.throughout()