Python simulates linked list insertion and deletion

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)

Guess you like

Origin blog.csdn.net/bdu_zhangAo/article/details/105563027