📜  反向链表 (1)

📅  最后修改于: 2023-12-03 14:50:32.912000             🧑  作者: Mango

反向链表

reverse_linked_list

简介

在计算机科学中,链表是一种常用的数据结构,用于存储一系列元素。反向链表是指通过改变链表中节点的指向来将原链表的顺序颠倒。

实现方法

要实现反向链表,我们需要遍历原链表,并且将每个节点的指针方向颠倒。具体的实现方法通常可以分为两种:迭代和递归。

迭代方法

迭代方法是通过循环遍历链表,逐个反转每个节点的指针。在遍历过程中,我们需要维护三个指针:当前节点、前一个节点和下一个节点。

def reverse_linked_list(head):
    prev = None
    curr = head
    while curr:
        next_node = curr.next
        curr.next = prev
        prev = curr
        curr = next_node
    return prev
递归方法

递归方法是通过递归调用函数来反转链表。递归方法的关键在于将链表分为两部分:第一个节点和剩余部分。我们首先递归地反转剩余部分,然后将第一个节点放到已反转部分的最后。

def reverse_linked_list(head):
    if not head or not head.next:
        return head
    reversed_head = reverse_linked_list(head.next)
    head.next.next = head
    head.next = None
    return reversed_head
使用案例

以下是一个示例,演示如何使用上述实现的反向链表函数:

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

def print_linked_list(node):
    while node:
        print(node.data, end=" -> ")
        node = node.next
    print("None")

# 创建一个链表: 1 -> 2 -> 3 -> 4 -> 5 -> None
head = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
n5 = Node(5)
head.next = n2
n2.next = n3
n3.next = n4
n4.next = n5

# 打印原链表
print("原链表:")
print_linked_list(head)

# 反向链表
reversed_head = reverse_linked_list(head)

# 打印反向链表
print("反向链表:")
print_linked_list(reversed_head)

输出结果:

原链表:
1 -> 2 -> 3 -> 4 -> 5 -> None
反向链表:
5 -> 4 -> 3 -> 2 -> 1 -> None
总结

反向链表是一种常见的操作,可以通过迭代或递归的方法实现。该操作在某些场景中非常有用,例如翻转字符串、解决某些算法问题等。了解反向链表的实现方法能够帮助程序员更好地理解和应用链表数据结构。