0
点赞
收藏
分享

微信扫一扫

D16-Acwing-复习复习

半秋L 2022-03-30 阅读 70

826

整体思路没问题,只是需要特殊判断一下,当k==0的时候

N = 100010
h,e,ne,idx = -1, [0]*N, [0]*N,0

def add_to_head(x):
    global idx,h
    idx+=1
    e[idx] = x
    ne[idx] = h
    h =idx
    
def add(k,x):
    global idx
    idx+=1
    e[idx] = x
    ne[idx] = ne[k]
    ne[k] = idx

def remove(k):
    global h
    if k==0:
        h = ne[h]
    else:
        ne[k] = ne[ne[k]]
    
m = int(input())
for _ in range(m):
    op,*pt = input().split()
    if op=='H':
        x = int(pt[0])
        add_to_head(x)
    elif op=='D':
        k = int(pt[0])
        remove(k)
    else:
        k,x = map(int,pt)
        add(k,x)

while h!=-1:
    print(e[h],end=' ')
    h = ne[h]

827

还是有3个地方有问题:
1、不要忘记初始化链表
r[0]=1
l[1]=0
2、双链表的结尾是1
3、在最右侧添加的时候,其实是在t的左边的右侧添加,所以应该是add(l[1],x),而不是add(1,x)

N = 100010
h,t,l,r,e,idx =0,1,[0]*N,[0]*N,[0]*N,1
def init():
    r[0] = 1
    l[1] = 0
def add(k,x):
    global idx
    idx += 1
    r[idx] = r[k]
    l[r[k]] = idx
    l[idx] = k
    r[k] = idx
    e[idx] = x
    
def remove(k):
    l[r[k]] = l[k]
    r[l[k]] = r[k]

init()
m = int(input())
for _ in range(m):
    op, *pt = input().split()
    if op == 'L':
        x = int(pt[0])
        add(0,x)
    elif op =='R':
        x = int(pt[0])
        add(l[1],x)
    elif op=='D':
        k = int(pt[0])
        remove(k+1)
    elif op=='IL':
        k,x = map(int,pt)
        add(l[k+1],x)
    else:
        k,x = map(int,pt)
        add(k+1,x)

h = r[h]
while h!=1:
    print(e[h], end=' ')
    h = r[h]
    
    

去吃饭啦~中午还要把小朋友们的书搬到老师的车上 ~争取能睡个午觉呜呜 ~

好多事情哇
好难受好想哭
虽然已经在哭了呜呜

举报

相关推荐

复习

复习ing

SpringBoot —— 复习

4.1复习

OSPF复习

复习js。

JavaScript复习()

0 条评论