24. 两两交换链表中的结点
题目链接
https://leetcode.cn/problems/swap-nodes-in-pairs/description/
解题思路
首先这是个递归问题,因为它可以明显的缩小问题规模。既然是递归的问题,那我们按照递归的一般思路来。
首先,我们考虑递归函数的参数和返回值。
因为这个题目和上一个题目,题号为2的题目不一样,那个题目有2个链表所以我们不知道究竟应该返回哪个。
但这个题目是一个链表,我们可以放心的用缩小规模的定义。
参数显然就是题目给出的一个链表。返回值是处理好的链表。
其次我们看本层处理什么,以及如何缩小问题规模。
本层是需要将本节点和下一个节点进行逆序操作。我们可以设置freq和last节点分别指向这两个节点。进行逆序操作之后,再接到下一层处理好的链表上。
最后,我们考虑边界条件(递归退出条件)
当前节点为None,或者当前节点的下一个节点为None时,代表我们没有办法进行归一化的处理,此时直接返回当前节点即可。
代码
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]: if head is None or head.next is None: return head freq, last = head, head.next freq.next = self.swapPairs(last.next) last.next = freq return last