这道题除了掌握递归和迭代的方法,也需要掌握迭代里节点交换的用法
#递归
class Solution:
def swapPairs(self,head):
#边界条件
if not head or not head.next:#head为空或只有head,都return head
return head
#初始化
first_node = head
second_node = head.next
#去second_node的next节点,同时两两交换
first_node.next = self.swapPairs(second_node.next)
second_node.next = first_node
#返回头节点
return second_node
时间复杂度O(n),空间复杂度O(n),递归过程中使用的堆栈空间
#迭代 迭代和递归虽然都是从上往下计算,但二者的区别在于递归是不断调用函数,而迭代是遍历整个列表或链表,继续下一步操作
#prev_node可以看作每一个头节点的前驱节点,初始为伪节点
class Solution:
def swapPairs(self,head):
#迭代操作就是从头节点开始,遍历整个链表,不断两两交换
#想对头节点进行操作,需要设置dummy伪节点
dummy=ListNode(-1)
dummy.next=head
prev_node = dummy
#遍历链表
while head and head.next:
#初始化节点
first_node = head
second_node= head.next
prev_node.next = second_node#学习
first_node.next = second_node.next#学习
second_node.next = first_node#学习
#上述三个步骤就类似于找个中间量做两数交换
#继续下两个节点
prev_node = first_node
head = first_node.next #first_node.next = second_node.next;first_node->第三个节点,所以此时头节点就是firs_node.next;对应的prev_node=first_node
return dummy.next
时间复杂度O(n)空间复杂度O(1),n指链表的节点数