📅  最后修改于: 2023-12-03 15:41:17.789000             🧑  作者: Mango
本题的目标是对链表进行成对交换元素。例如,对于链表 1 -> 2 -> 3 -> 4,交换后应该变为 2 -> 1 -> 4 -> 3。
我们可以使用递归的方法来解决这个问题。我们定义一个递归函数 swapPairs(head)
,该函数接收一个链表头结点 head
,返回交换后的链表头结点。
递归函数的主要流程如下:
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
可以看到,程序成功将链表中的元素成对交换。