Simulate linked list insertion and deletion
Language: python
Code:
def appendleft(r,d):
# 思路:先在最后插入,然后找到标志物的位置,把最后一个位置的right设为标志物的位置,把标志物左边的right改成最后一个位置
# 数据插入到最后
data.append(d)
# t从0开始,这样可以保证遍历到全部。
t=0
# 判断的是第t位置的right的data是否等于标志物。
while data[right[t]]!=r:
t=right[t]
# 如果等于了,就代表此时t是标志物的前一个位置。
# 所以这里插入的是right[t]
right.append(right[t])
# 然后right[t]再修改为最后一个位置。
right[t]=len(right)-1
def appendright(r,d):
# 和往左插入唯一的不同就是,向右插入中标志物的位置,就是向左插入中标志物左边的位置。
data.append(d)
t=1
while data[t]!=r:
t=right[t]
right.append(right[t])
right[t]=len(right)-1
def dele(d):
# 思路:要删除的数即为标志物,将标志物的前一个的right设为标志物的right即可。
# 还是查找标志物的前一个
t=0
while data[right[t]]!=d:
t=right[t]
# 将它的right设为他的right的right
right[t]=right[right[t]]
# 此方法会造成空间的浪费。right数组的大小,会随着插入次数的增多而逐渐增大,而在删除元素之后却不会减小,data也是。
def pri():
t=1
while t!=0:
print(data[t],end=" ")
t=right[t]
print()
# 初始data,0不输出
data=[0,2,3,4]
# 初始right数组,0位置为1方便遍历,然后1位置开始每个都指向它右边一个数的位置。
right=[1,2,3,0]
# 在4左边插入一个5
appendleft(4,5)
pri()
# 在5左边插入一个6
appendleft(5,6)
pri()
# 在5左边插入一个7
appendleft(5,7)
pri()
# 在7右边插入一个8
appendright(7,8)
pri()
# 在3右边插入一个9
appendright(3,9)
pri()
# 删除9
dele(9)
pri()
# 删除3
dele(3)
pri()
# 删除4
dele(4)
pri()
print(right)
print(data)