class Node:
'''
相当于C语言中的结构体,定义了一个结点类型
'''
def __init__(self,data):
self.data=data
self.next=None # 初始化为None,如果后面不赋新值则一直为None
class LinkedList:
'''
__init__(self):属于类的构造函数或者初始化方法,每当创建一个这种类
的实例,这个函数就会被执行一次
'''
def __init__(self):
self.size=0;
self.head=None
self.last=None #指向尾结点的指针
def get(self,index):
if index<0 or index >=self.size:
raise Exception('超出链表节点范围')
p=self.head #p是一个指针
for i in range(index):
p=p.next #不同类之间的变量调用
return p # P指向index
def insert(self,index,data):
if index<0 or index >=self.size:
raise Exception('超出链表节点范围')
node=Node(data)
'''
上一句创建了一个新的结点,并且传入新节点的数据是data
node.data=data
node.next=None
'''
if self.size==0: #空链表
self.head=node
self.last=node
elif index==0: # 插入头部
node.next=self.head
self.head=node
elif self.size==index: # 插入尾部
node.next=None # 这句话可以不加,因为在创建结点类时,给next初始值是None,没有这句话,node.next依然等于 None
self.last.next=node
self.last=node
else: #插入中间结点
prve_node=self.get(index-1)
node.next=prve_node.next
prve_node.next=node
self.size += 1
def remove(self,index):
if index<0 or index >=self.size:
raise Exception('超出链表节点范围')
if index==0: # 删除头节点
removed_node=self.head #把要删除的元素保存下来
self.head=self.head.next
elif index==self.size-1: # 删除尾结点
prve_node=self.get(index-1)
removed_node=prve_node.next
prve_node.next=None
self.last=prve_node
else: # 删除中间结点
prve_node=self.get(index-1)
next_node=prve_node.next.next
removed_node=prve_node.next
prve_node.next=next_node
self.size -=1
return removed_node
def output(self):
p=self.head
while p is not None:
print(p.data)
p=p.next
if __name__=='__main__':
linkedList = LinkedList()
linkedList.insert(0,3)
linkedList.insert(0, 2)
linkedList.insert(0, 4)
linkedList.insert(3, 1)
linkedList.remove(0)
linkedList.output()
利用Python实现链表
最新推荐文章于 2024-04-24 21:16:44 发布