我正在询问如何在Python中正确地遵循链表

问题描述 投票:0回答:1
class Village:
def __init__(self, owner=None):
    self.owner = owner
    self.next = None

class Pioneer:
def __init__(self, position):
    self.position = None

def main():
   k, n = map(int, input().split())

   pioneers = [Pioneer(i) for i in range(k)]

   starting_village = Village()
   current_village = starting_village

   villages = [starting_village]

    for i in range(n):
        pioneer, action = map(str, input().split())

        if action == "move":
            if current_village.next is not None:
                current_village = current_village.next
            pioneers[int(pioneer)].position = current_village

        elif action == "build":
            new_village = Village(owner=pioneer)
            if current_village.next is not None:
                new_village.next = current_village.next
            current_village.next = new_village
            pioneers[int(pioneer)].position = new_village
            villages.append(new_village)

    m = len(villages) - 1
    print(m)

    current_village = starting_village.next
    while current_village is not None:
        print(current_village.owner)
        current_village = current_village.next

if __name__ == "__main__":
    main()

在链接列表上,我不知道为什么我的代码不能按照我的想法工作。 如果我

2 4
0 build
1 build
1 move
1 build

如果是我想的那样 起源 -> 村庄 2(先锋 1 拥有) -> 村庄 1(先锋 0 拥有)-> 村庄 3(先锋 1 拥有) 所以我想这会是

3 1 0 1

但是

3 1 1 0
即将推出。

有什么问题吗?

如果action == "build",如果当前村庄中有下一个村庄,先锋可以在现在的村庄和下一个村庄之间创建一个新的村庄。 如果旁边没有村庄,先锋可以在当前村庄旁边建造一个村庄。

当先锋建立村庄时,先锋将先锋的位置移动到新村庄。

先锋移动时,如果当前村庄有下一个村庄,则先锋可以移动到下一个村庄。 如果没有下一个村庄,先锋就会留在现在的地方。

python linked-list
1个回答
0
投票

您应该通过保留对旧下一个村庄的引用来正确插入新村庄,然后更新新村庄的

next
属性。检查如何修改您的
build
操作:

elif action == "build":
    new_village = Village(owner=pioneer)
    old_next = current_village.next
    current_village.next = new_village
    new_village.next = old_next
    pioneers[int(pioneer)].position = new_village
    villages.append(new_village)
© www.soinside.com 2019 - 2024. All rights reserved.