📌  相关文章
📜  给定链表的成对交换元素(1)

📅  最后修改于: 2023-12-03 15:41:17.789000             🧑  作者: Mango

给定链表的成对交换元素

本题的目标是对链表进行成对交换元素。例如,对于链表 1 -> 2 -> 3 -> 4,交换后应该变为 2 -> 1 -> 4 -> 3。

思路

我们可以使用递归的方法来解决这个问题。我们定义一个递归函数 swapPairs(head),该函数接收一个链表头结点 head,返回交换后的链表头结点。

递归函数的主要流程如下:

  1. 如果链表为空或只有一个结点,直接返回。
  2. 如果链表有两个结点,则交换它们,并返回头结点。
  3. 对于有三个及以上结点的链表,我们先交换前两个结点,然后递归调用 swapPairs 函数来交换剩下的结点,并将前两个结点和递归返回的头结点拼接在一起。

具体的实现可以参考下面的代码。

代码
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def swapPairs(head: ListNode) -> ListNode:
    # 链表为空或只有一个结点,直接返回
    if not head or not head.next:
        return head
    
    # 链表有两个结点,交换它们
    if head.next.next is None:
        temp = head.next
        head.next = None
        temp.next = head
        return temp
    
    # 链表有三个及以上结点,递归调用 swapPairs 函数
    temp = head.next
    head.next = swapPairs(temp.next)
    temp.next = head
    return temp
测试

下面给出了一个简单的测试例子。

# 构建链表:1 -> 2 -> 3 -> 4 -> None
list = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
# 交换链表中的元素
new_list = swapPairs(list)
# 遍历交换后的链表
while new_list:
    print(new_list.val, end=" ")
    new_list = new_list.next
# 输出: 2 1 4 3 

可以看到,程序成功将链表中的元素成对交换。