AcWing 827. 双链表-python3
原题链接
简单
作者:
Actor丶
,
2020-03-23 20:26:49
,
所有人可见
,
阅读 825
"""
双链表模板:
## 初始化双链表
e = [0]*(M+10) # M表示最多的节点数
r = [0]*(M+10)
l = [0]*(M+10)
r[0] = 1
l[1] = 0
idx = 2
def add(k, x):
# 在第k个插入的数后面添加数x
global idx
e[idx] = x
r[idx] = r[k]
l[idx] = k
l[r[k]] = idx # !!!注意:后两句的顺序不能颠倒,否则r[k] = idx,l[r[k]] = l[idx] = idx,出错
r[k] = idx
idx += 1
def delete(k):
# 删除第k个插入的数后面的数
r[l[k]] = r[k]
l[r[k]] = l[k]
"""
def add(k, x):
"""在第k个插入的数后面添加数x"""
global idx
e[idx] = x
r[idx] = r[k]
l[idx] = k
l[r[k]] = idx # !!!注意:后两句的顺序不能颠倒,否则r[k] = idx,l[r[k]] = l[idx] = idx,出错
r[k] = idx
idx += 1
def delete(k):
"""删除第k个插入的数后面的数"""
r[l[k]] = r[k]
l[r[k]] = l[k]
if __name__=="__main__":
M = int(input().strip())
# 初始化双链表
e = [0]*(M+10)
r = [0]*(M+10)
l = [0]*(M+10)
r[0] = 1
l[1] = 0
idx = 2
for i in range(M):
in_li = list(input().split())
op = in_li[0]
if op=="L":
x = int(in_li[1])
add(0, x) # !!!出错:添加头结点时应该直接在0号点的右侧添加,而不应该在r[0]的右侧添加
elif op=="R":
x = int(in_li[1])
add(l[1], x)
elif op=="D":
k = int(in_li[1])
delete(k+1)
elif op=="IL":
k, x = map(int, in_li[1:])
add(l[k+1], x)
else:
k, x = map(int, in_li[1:])
add(k+1, x)
i = r[0]
while i!=1:
print(e[i], end=" ")
i = r[i]