问题:
题目来源:力扣(LeetCode)
难度:中等
分析:
使用迭代和递归两种方法实现
主要是链表指针的操作要熟悉。
解决方法:
1:迭代
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummy = ListNode(-1)
dummy.next = head
pre_node = dummy
while head and head.next:
first_node = head
second_node = head.next
# 注意次序,别形成环
pre_node.next = second_node
first_node.next = second_node.next
second_node.next = first_node
pre_node = first_node
head = first_node.next
return dummy.next
复杂度:O(n)
2:递归
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
超50%
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
# 如果列表为空或者列表已经到结尾,返回头结点
if not head or not head.next:
return head
first_node = head
second_node = head.next
first_node.next = self.swapPairs(second_node.next)
second_node.next = first_node
return second_node
复杂度:O(n)