python如何反转一个单链表?

可以通过遍历单链表并调整指针的方向来反转它。以下是一个 Python 实现:

class ListNode:
    def __init__(self, value=0, next=None):
        self.value = value
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def insert(self, value):
        """在链表头部插入新节点"""
        new_node = ListNode(value)
        new_node.next = self.head
        self.head = new_node

    def reverse(self):
        """反转链表"""
        prev = None
        current = self.head
        while current:
            next_node = current.next  # 暂存下一个节点
            current.next = prev       # 将当前节点的 next 指向前一个节点
            prev = current            # 前一个节点移动到当前节点
            current = next_node       # 当前节点移动到下一个节点
        self.head = prev              # 更新头节点为反转后的第一个节点

    def __repr__(self):
        """打印链表"""
        nodes = []
        current = self.head
        while current:
            nodes.append(str(current.value))
            current = current.next
        return " -> ".join(nodes)

# 测试单链表反转
ll = LinkedList()
ll.insert(1)
ll.insert(2)
ll.insert(3)
ll.insert(4)

print("反转前的链表:", ll)

ll.reverse()

print("反转后的链表:", ll)

说明

    初始化链表:insert 方法用于在链表头部插入一个新节点。
    反转链表:reverse 方法使用迭代的方式遍历链表,同时调整节点的 next 指针,使链表的方向反转。
    打印链表:__repr__ 方法用于打印链表内容。

请使用浏览器的分享功能分享到微信等