一、概念
1.什么是单链表:单链表是线性表的一种链式存储结构。
2.单链表的组成:单链表由n个结点链接而成,每个结点由数据域和指针域构成。
3.什么是头指针:头指针是链表指向第一个结点的指针,是链表的必要元素,定义在单链表中的很多操作都是基于头指针的工作指针后移。
4.为什么选择链式存储:与线性表的顺序存储相比,其链式存储在当需要频繁插入或删除数据时具有效率优势。
二、定义在链表上的操作
class Node(object):
'''创建结点'''
def __init__(self, data,next = None):
self.data = data
self.next = next
class SingleLinkList(object):
def __init__(self,data = None):
self.header = None
if data != None:
self.CreateListTail(data)
def CreateListTail(self,data):
'''尾插法的整表创建'''
for i in data:
node = Node(i)
if self.header == None:
self.header = node
else:
current_node = self.header
while current_node.next != None:
current_node = current_node.next
node.next = current_node.next
current_node.next = node
def is_impty(self):
'''判断链表是否为空'''
if self.header == None:
return True
else:
return False
def get_lenth(self):
'''获取当前链表长度'''
count = 0
current_node = self.header
while current_node != None:
current_node = current_node.next
count+=1
return count
def getelem(self,index):
'''读取单链表指定位置数据'''
current_node = self.header
if (index<=0 or index>self.get_lenth()):
print('get error')
else:
for i in range(1,index):
current_node = current_node.next
e = current_node.data
return e
def traverse(self):
'''遍历单链表'''
current_node = self.header
while current_node != None:
print(current_node.data)
current_node = current_node.next
def ListInsert(self,value,index):
'''在单链表指定位置插入数据'''
current_node = self.header
node = Node(value)
if (index<=0 or index>self.get_lenth()+1):
print('insert error')
if index == 1:
if self.is_impty():
self.header = node
else:
node.next = self.header
self.header = node
else:
for i in range(1,index-1):
current_node = current_node.next
node.next = current_node.next
current_node.next = node
def ListDelete(self,index):
'''从单链表指定位置删除数据'''
current_node = self.header
if (index<=0 or index>self.get_lenth()):
print('delete error')
if index == 1:
self.header = current_node.next
else:
for i in range(1,index-1):
current_node = current_node.next
delete_node = current_node.next
current_node.next = delete_node.next