何为链表
链表就是在引用之前就有其先后顺序元素之间通过持有其他引用指针来完成有序的数据结构.
链表分为单项链表和双向链表本文只针对单向链表的搭建进行描述.
节点
通过指针连接的每个元素称之为节点,节点由指针以及所携带数据(也可以携带字符串,列表等)
指针
用来连接各个元素的自定义属性
from typing import List #引用部分引用类型列表
#节点的创建
class Node:
def __init__(self,data):#定义节点属性
self.data=data#节点赋值
self.next=None#定义指针
def __repr__(self):#将节点转化为字符串显示
return f"Node({self.data})"
创建链表
class LinkList:
def __init__(self):#定义链表属性
self.head=None #定义头
self.tail=None #定义尾
self.size=0 #给定原有长度
def get(self,index):#给定一个位置获取该位置节点
cur=self.head
for _ in range(index):
cur=cur.next
return cur
def insert(self,index,element):#在指定位置插入元素
new_node=Node(element)
if index < 0 or index> self.size:
raise Exception('索引越界')
elif self.size == 0:
self.head = new_node
self.tail = new_node
elif index==0:
new_node.next=self.head
self.head=new_node
elif index==self.size:
self.tail.next=new_node
self.tail=new_node
else:
pre=self.get(index-1)
new_node.next=pre.next
pre.next=new_node
self.size+=1
def remove(self,index):#移除指定元素
if index<0 or index>=self.size:
raise Exception('索引越界')
if index==0:
remove_node=self.head
self.head=self.head.next
elif index==self.size-1:
pre=self.get(index-1)
remove_node=pre.next
pre.next=None
self.tail=pre
else:
pre = self.get(index - 1)
remove_node = pre.next
pre.next=pre.next.next
self.size-=1
return remove_node.data
def reverse(self):#反转链表
pre =None
cur=self.head
while cur:
temp=cur.next
if pre is None:
cur.next=pre
else:
cur.next=pre
pre=cur
cur=temp
self.head=pre
def __repr__(self):#链表打印
cur=self.head
str1=""
while cur :
str1=str1+f"{cur}->"
cur=cur.next
return str1+"END"
def print_list(self): # 链表内容打印
cur = self.head
while cur:
print(cur.data)
cur = cur.next
if __name__ == '__main__':
l=LinkList()
l.insert(0,1)
l.insert(1,2)
l.insert(2,4)
l.insert(1,5)
l.remove(3)
# l.reverse()
l.print_list()
print(l)