python - 在Python中反转链表

标签 python linked-list

class node:
    def __init__(self, data = None):
        self.data = data
        self.next = None

class linked_list:
    def __init__(self):
        self.head = node()

这就是我在 python 中初始化 LinkedList 数据结构的方法。

在我附加一些节点后,通过执行

my_list.append(1)
my_list.append(2)
my_list.append(3)
my_list.append(4)

并使用我编写的函数显示它,

def display(self):

    elems = []
    curr = self.head

    while curr.next != None:
        curr = curr.next
        elems.append(curr.data)

    print(elems)

它打印出 [1, 2, 3, 4] 看起来不错。

但是,当我尝试使用下面的函数来反转它时

def reverseList(self):

    curr = self.head
    prev = None


    while curr != None:

        curr.next = prev
        prev = curr
        curr = curr.next

    self.head = prev

它给了我一个空的linkedList[]。如果我在纸上绘制 LinkedList,看起来很好,而且我看不出我做错了什么。

最佳答案

反向

看看你的操作顺序:

curr.next = prev
prev = curr
curr = curr.next

在执行 curr = curr.next 之前,curr.next 等于 prev,它等于 None(在第一个过程中) ,以及最终迭代)。

在更改之前,您需要将 curr.next 的值存储在中间变量中。

或者,您可以使用 Python 的多重赋值 ( Multiple assignment and evaluation order in Python ) 在评估所有变量的值后立即为其赋值:

curr.next, prev, curr = prev, curr, curr.next

显示

您在显示功能中也遇到了同样的问题。

while curr.next != None:
    curr = curr.next
    elems.append(curr.data)

您不附加第一个 curr.data,而是直接将 curr 更改为 curr.next

关于python - 在Python中反转链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48032025/

相关文章:

python - 如何在此(简单的)python 程序中正确使用递归?

c++ - 为包含 STL 类的链表结构释放内存

java - 使用指向除下一个节点之外的随机节点的指针复制 LinkedList

python - 在 Python 中将短划线分隔的字符串数据转换为嵌套字典/列表

python - 如何检索 FFMPEG(从 OpenCV 调用)Python 解码错误

python - 如何将两个 Pandas DataFrame 与不同的、不重叠的 MultiIndex 结合起来?

python - 使用 Porter Stemmer 时出现 NLTK 导入错误

python - 如何使用 tkinter 在 python 中嵌入 python 解释器框架?

c++ - 单链表 - C++ - 无法解释的运行时错误

c++ - 制作链接列表的 vector ?