"双链表"
class Node:
def __init__(self, val) -> None:
# 当前节点值
self.val = val
# 下一个节点
self.next = next
# 上一个节点
self.prev = None
class MyLinkedList:
def __init__(self):
"循环"
self.head = Node(-1)
self.tail = Node(-1)
# 让伪头节点的下一个节点是 伪尾节点
self.head.next = self.tail
# 让伪尾节点的下一个节点是 伪头节点
self.tail.next = self.head
self.size = 0
def get(self,index: int) -> int:
# 判断index是否有效
if index < 0 or index > self.size:
return -1
curr = self.getNode(index)
return curr.val
def getNode(self,index:int) -> Node:
# 判断index的值是否过了1半的索引
if index < self.size//2:
# 如果索引小于1半值,从头查找速度快一些
curr = self.head # 获取头信息
for i in range(index+1):
curr = curr.next
else:
# 如果索引大于1半值,从尾查找速度快一些
curr = self.tail # 获取尾信息
for i in range(self.size - index):
curr = curr.prev
return curr
def addAtHead(self, val: int) -> None:
self.addNode(self.head,self.head.next,val)
def addAtTail(self, val: int) -> None:
self.addNode(self.tail.prev,self.tail,val)
def addAtIndex(self, index: int, val: int) -> None:
# 判断index是否有效
if index > self.size:
return
if index < 0:
index = 0
# 找到要哪个节点前增加数据
curr = self.getNode(index)
# 增加节点
self.addNode(curr.prev,curr,val)
def addNode(self,first:Node,second:Node,val:int) -> None:
# 创建一个新节点
temp_node = Node(val)
# 创建的下一个节点是second
temp_node.next = second
# 原第二个节点的上一节更新为 新创建的节点
second.prev = temp_node
# 第一个节点的下一个节点更新为 创建新节点
first.next = temp_node
# 新创建的节点的上一个节点 更新原第一个节点
temp_node.prev = first
# 更新节点数
self.size += 1
def deleteAtIndex(self, index: int) -> None:
# 判断index是否有效
if index < 0 or index > self.size:
return
# 获取要删除的节点
curr = self.getNode(index)
# 修改要删除节点的上一个节点的关系
curr.prev.next = curr.next
# 修改要删除节点的下一个节点的关系
curr.next = curr.prev
# 更新节点数
self.size -= 1

老师您好,请问这个错要怎么改正?