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

 

posted @ 2023-01-06 01:04  BJFU-VTH  阅读(14)  评论(0编辑  收藏  举报