题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
解析
1.参考 LeetCode 分类刷题:25. K 个一组翻转链表
这里相当于k = 2
2.灵神方法

答案
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: Optional[ListNode]) -> Optional[ListNode]:
p0 = dummy = ListNode(next = head)
cur = head
n = 0
while cur:
n += 1
cur = cur.next
pre = None
cur = head
while n >= 2:
n -= 2
for _ in range(2):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
nxt = p0.next
p0.next.next = cur
p0.next = pre
p0 = nxt
return dummy.next
2.
# 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]:
dummy = n0 = ListNode(next = head)
n1 = head
while n1 and n1.next:
n2 = n1.next
n3 = n2.next
n0.next = n2
n2.next = n1
n1.next = n3
n0 = n1
n1 = n3
return dummy.next
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)

683

被折叠的 条评论
为什么被折叠?



