0 题目描述
leetcode原题链接:24. 两两交换链表中的节点
1 递归解法
如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。
# 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: ListNode) -> ListNode:
if not head or not head.next:
return head
newhead = head.next
head.next = self.swapPairs(newhead.next)
newhead.next = head
return newhead
复杂度分析
时间复杂度:
O
(
n
)
O(n)
O(n),其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度:
O
(
n
)
O(n)
O(n),其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。