【问题标题】:Swap two nodes in a doubly linked list交换双向链表中的两个节点
【发布时间】:2021-04-02 08:39:18
【问题描述】:

我有以下代码用于尝试交换 dll 中的 2 个节点:

def swap_nodes(self, index_1, index_2):
        node_1 = self[index_1]
        node_2 = self[index_2]

        node_2.next.prev = node_1
        node_2.prev.next = node_1
        node_1.prev.next = node_2
        node_1.next.prev = node_2

        temp_node_1 = node_1
        node_1.next = node_2.next
        node_1.prev = node_2.prev
        node_2.next = temp_node_1.next
        node_2.prev = temp_node_1.prev

def __getitem__(self, index):
        c = 0
        for node in self:
            if c == index:
                return node
            c += 1
        if c < index + 1:
            raise IndexError

在这个 dll 上运行它:

1 <-> 3 <-> 4 <-> 6 <-> 7 <-> 10

制作这个:

1 <-> 3 <-> 7 <-> 10

我怎样才能做到这一点?(假设它不包括头/最后一个节点)

【问题讨论】:

    标签: python linked-list nodes doubly-linked-list


    【解决方案1】:

    我认为你在这里遇到的问题是你没有复制temp_node_1,所以接下来的两行实际上修改了temp_node_1,这样当你尝试使用“旧版本”它实际上使用更新的node_2的节点。

    尝试单独保存旧版本的字段,所以:

    # Instead of this
    temp_node_1 = node_1
    # Do this
    temp_next = node_1.next
    temp_prev = node_1.prev
    # And then use these pointers accordingly:
    node_1.next = node_2.next               # No change
    node_1.prev = node_2.prev               # No change
    node_2.next = temp_next
    node_2.prev = temp_prev
    

    【讨论】:

    • 不知道自定义对象也会发生这种情况。现在可以使用了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多