首页 > 编程知识 正文

反转链表的Python实现

时间:2023-11-20 00:35:12 阅读:295329 作者:EYLY

反转链表是一种常见的链表操作,它可以将链表中的节点顺序反转。在Python中,我们可以使用迭代或递归的方式实现链表的反转。以下是反转链表的Python实现:

一、迭代实现

迭代实现是通过遍历链表将节点指针反转的方法。


# 定义链表节点类
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def reverse_list(head):
    prev = None
    curr = head
    while curr:
        temp = curr.next
        curr.next = prev
        prev = curr
        curr = temp
    return prev

# 创建链表
head = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
head.next = node2
node2.next = node3
node3.next = node4

# 反转链表
new_head = reverse_list(head)

# 输出反转后的链表
while new_head:
    print(new_head.val)
    new_head = new_head.next

以上代码中,我们使用两个指针prev和curr,将curr的next指针指向prev,从而实现链表的反转。在遍历过程中,我们需要一个临时变量temp来保存curr的下一个节点,以免丢失信息。

二、递归实现

递归实现是通过递归调用函数将当前节点后续的链表反转,并将当前节点的next指针指向前一个节点的方式实现。


def reverse_list_recursive(head):
    if not head or not head.next:
        return head
    new_head = reverse_list_recursive(head.next)
    head.next.next = head
    head.next = None
    return new_head

# 创建链表
head = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
head.next = node2
node2.next = node3
node3.next = node4

# 反转链表
new_head = reverse_list_recursive(head)

# 输出反转后的链表
while new_head:
    print(new_head.val)
    new_head = new_head.next

以上代码中,我们通过递归调用函数实现链表的反转。在递归调用过程中,我们不断缩小问题规模,直到遇到最后一个节点或空节点为止,然后逐层返回反转后的链表的头节点。

三、小结

反转链表是一种常见的链表操作,可以通过迭代或递归的方式实现。在迭代实现中,我们使用两个指针来遍历链表并反转节点指针;在递归实现中,我们通过递归调用函数将当前节点后续的链表反转,并将当前节点的next指针指向前一个节点。以上是反转链表的Python实现示例。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。