基于数组实现双向链表
e[n] # 存储第节点n的值
left[n] # 指向节点n的上一个节点
right[n] # 指向节点n的下一个节点
双链表
n = 100000
e = [0] * n
left = [0] * n
right = [0] * n
# 初始化
# 将节点0作为头节点
# 将节点1作为尾节点
right[0] = 1
# left[0] = -1 # 头节点没有左节点x
left[1] = 0
# right[1] = -1 # 尾节点没有右节点
idx = 2 # 可使用节点从节点2开始
# 在节点a的右边插入一个数x
def insert(a, x):
global idx
e[idx] = x
left[idx] = a
right[idx] = right[a]
left[right[a]] = idx
right[a] = idx
idx += 1
# 删除节点a
def remove(a):
right[left[a]] = right[a]
left[right[a]] = left[a]
if __name__ == '__main__':
m = int(input())
for _ in range(m):
k = x = 0
t = input().split(" ")
if t[0] == "L":
x = int(t[-1])
insert(0, x)
elif t[0] == "R":
x = int(t[-1])
insert(left[1], x)
elif t[0] == "D":
k = int(t[-1])
remove(k + 1)
elif t[0] == "IL":
k, x = int(t[1]), int(t[2])
insert(left[k + 1], x)
else:
k, x = int(t[1]), int(t[2])
insert(k + 1, x)
i = right[0] # 虚拟头节点
while i != 1: # 虚拟尾节点
print(e[i])
i = right[i]
"""
IN:
10
R 7
D 1
L 3
IL 2 10
D 3
IL 2 7
L 8
R 9
IL 4 7
IR 2 2
OUT:
8
7
7
3
2
9
"""
最后更新于
这有帮助吗?