我正在try 用Python语言编写一个简单的函数来反转链表:

def reverse(head):
    prev = None
    nxt = head.next
    head.next = prev
    while nxt:
        prev = head
        head = nxt
        head.next = prev
        nxt = nxt.next
    return head

当我仔细考虑的时候,这个逻辑似乎是正确的. 首先将prev移动到Head,然后向前移动Head,使其指向与nxt相同的 node ,然后将Head设置在它所在的位置旁边.最终将nxt向前移动一位.迭代,直到nxt到达列表的末尾.

但是,当我try 用以下代码反转链表0->1->2->3->4->5时:

def traverse(head):
    while head:
        print(head.val)
        head = head.next

它无休止地重复打印0和1.

推荐答案

正如Michael指出的,您的代码使链表中的第一个和第二个元素彼此指向对方.

解决方法很简单,下面是我所做的:

def reverse(head):
    nxt = head.next
    head.next = None
    while nxt:
        temp1 = nxt.next
        temp2 = head
        head = nxt 
        nxt.next = temp2
        nxt = temp1

这段代码最初做的事情与您的相同.然而,While循环使用2个临时变量temp1temp2来保存nxt周围的变量的地址(两侧).这可以防止代码中发生的冲突.

希望这个能帮上忙! 干杯!

Python相关问答推荐

如何删除索引过go 的lexsort深度可能会影响性能?' &>

如何标记Spacy中不包含特定符号的单词?

无法通过python-jira访问jira工作日志(log)中的 comments

在Python中管理打开对话框

在Python中动态计算范围

使用Python更新字典中的值

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Django admin Csrf令牌未设置

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

Polars asof在下一个可用日期加入

如何使用Numpy. stracards重新编写滚动和?

重置PD帧中的值

从列表中获取n个元素,其中list [i][0]== value''

Odoo16:模板中使用的docs变量在哪里定义?

从源代码显示不同的输出(机器学习)(Python)

如何在Airflow执行日期中保留日期并将时间转换为00:00

Python如何导入类的实例

对包含JSON列的DataFrame进行分组

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

如何通过函数的强式路径动态导入函数?