返回
巧用迭代与递归,交换链表中的节点
前端
2024-01-03 17:53:48
迭代法
迭代法是一种常见的链表交换方法,它通过迭代器逐个遍历链表中的节点,并对相邻节点进行交换。这种方法简单易懂,代码实现也相对容易。
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
比较
迭代法和递归法都是交换链表中的节点的有效方法。迭代法简单易懂,代码实现也相对容易。递归法虽然实现稍微复杂一些,但它可以更简洁地表达交换链表的逻辑。
在实际应用中,我们可以根据具体情况选择使用迭代法或递归法。如果链表较长,则迭代法可能会更有效;如果链表较短,则递归法可能会更方便。