版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012219371/article/details/85833451
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
class SingleLinkedList(object):
def __init__(self):
# 头节点
self.node = Node(None)
# 头指针
self.head = self.node
# 链表节点数量
self.size = 0
def is_empty(self):
return True if self.head.next == None else False
def get_size(self):
return self.size
# 头插法
def add_head(self, data):
node = Node(data)
node.next = self.head.next
self.head.next = node
self.size+=1
# 尾插法
def add_tail(self, data):
node = Node(data)
if self.head.next == None:
self.head.next = node
self.size+=1
else:
current_node = self.head
while (current_node.next != None):
current_node = current_node.next
current_node.next = node
self.size+=1
# 指定位置插入元素,position从1开始
def insert_at_position(self,data,position):
if position<1 or position>self.size+1:
raise IndexError('插入位置越界')
if position==1:
self.add_head(data)
elif position==self.size:
self.add_tail(data)
else:
current_node=self.head
for i in range(1,position):
current_node=current_node.next
node=Node(data)
node.next=current_node.next
current_node.next=node
self.size+=1
# 显示所有元素
def show_all_data(self):
current_node = self.head.next
result=""
while (current_node != None):
result+=str(current_node.data)+" "
current_node = current_node.next
print(result)
# 删除第一个元素
def delete_head(self):
if self.size==0:
raise Exception('链表为空,错误操作')
elif self.size==1:
self.head.next=None
self.size-=1
else:
self.head.next=self.head.next.next
self.size-=1
# 删除最后一个元素
def delete_tail(self):
if self.size==0:
raise Exception('链表为空,错误操作')
elif self.size==1:
self.head.next=None
self.size-=1
else:
current_node=self.head
for i in range(1,self.size):
if current_node!=None:
current_node=current_node.next
current_node.next=None
self.size-=1
# 删除指定位置的元素
def delete_at_position(self,position):
if position<1 or position>self.size:
raise IndexError('删除位置越界')
elif position==1:
self.delete_head()
self.size-=1
elif position==self.size:
self.delete_tail()
self.size-=1
else:
current_node=self.head
for i in range(position-1):
if current_node!=None:
current_node=current_node.next
current_node.next=current_node.next.next
self.size-=1
# 按值查找元素,返回第一个查找到的位置
def find_node(self,data):
if self.size==0:
raise Exception('链表为空')
current_node=self.head
index=0
while current_node.next!=None:
current_node=current_node.next
index+=1
if current_node.data==data:
break
return index
if __name__ == '__main__':
sll=SingleLinkedList()
sll.add_tail(1)
sll.add_tail(2)
sll.add_tail(3)
sll.add_tail(4)
sll.add_tail(5)
sll.show_all_data()
index=sll.find_node(3)
sll.delete_at_position(index)
sll.show_all_data()
sll.insert_at_position(3,3)
sll.show_all_data()