返回

巧用迭代与递归,交换链表中的节点

前端

迭代法

迭代法是一种常见的链表交换方法,它通过迭代器逐个遍历链表中的节点,并对相邻节点进行交换。这种方法简单易懂,代码实现也相对容易。

def swap_pairs_iterative(head):
    """
    迭代法交换链表中的节点

    参数:
        head: 链表的头节点

    返回:
        交换后的链表的头节点
    """

    # 创建一个虚拟节点作为链表的头节点
    dummy = ListNode(0)
    dummy.next = head

    # 设置当前节点为虚拟节点
    current = dummy

    # 循环遍历链表
    while current.next and current.next.next:
        # 获取当前节点的下一个节点和再下一个节点
        first = current.next
        second = current.next.next

        # 交换当前节点的下一个节点和再下一个节点
        current.next = second
        first.next = second.next
        second.next = first

        # 将当前节点移动到交换后的位置
        current = current.next.next

    # 返回交换后的链表的头节点
    return dummy.next

递归法

递归法是一种利用递归调用来解决问题的算法。在链表交换问题中,我们可以使用递归函数来交换链表中的节点。

def swap_pairs_recursive(head):
    """
    递归法交换链表中的节点

    参数:
        head: 链表的头节点

    返回:
        交换后的链表的头节点
    """

    # 如果链表为空或只有一个节点,则直接返回
    if not head or not head.next:
        return head

    # 获取当前节点的下一个节点和再下一个节点
    first = head
    second = head.next

    # 交换当前节点的下一个节点和再下一个节点
    head = second
    second.next = first
    first.next = swap_pairs_recursive(second.next)

    # 返回交换后的链表的头节点
    return head

比较

迭代法和递归法都是交换链表中的节点的有效方法。迭代法简单易懂,代码实现也相对容易。递归法虽然实现稍微复杂一些,但它可以更简洁地表达交换链表的逻辑。

在实际应用中,我们可以根据具体情况选择使用迭代法或递归法。如果链表较长,则迭代法可能会更有效;如果链表较短,则递归法可能会更方便。