链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路:
时间复杂度:O(n),其中 n 指的是链表的节点数量。
空间复杂度:O(n),递归过程使用的堆栈空间。
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
first=head
second=head.next
# swap
first.next=self.swapPairs(second.next)
second.next=first
return second
我们把链表分为两部分,即奇数节点为一部分,偶数节点为一部分,first 指的是交换节点中的前面的节点,second 指的是要交换节点中的后面的节点。完成 first 和 second 的交换后,我们再用一个 prev 节点 记录 first 的前驱节点。
思路:
first 和 second 分别遍历奇数节点和偶数节点;
交换两个节点,同时需要更新 prev.next 指向交换后的头节点:
prev.next = second
first.next = second.next
second.next = first
重新初始化 prev 节点和 head 节点的位置,然后迭代交换,直到交换完成。
时间复杂度:O(n),其中 n 指的是链表的节点数量。
空间复杂度:O(1)。
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummy=ListNode(-1)
dummy.next=head
pre=dummy
while head and head.next:
first=head
second=head.next
# swap
prev.next=second
first.next=second.next
second.next=first
# Reinitializing the head and prev for next swap
prev=first
head=first.next
return dummy.next
如果觉得文章不错,希望大家可以关注我噢,点赞、收藏、在看、分享就再好不过了。如果有任何建议和问题,可以在下方给我留言,我会不定期更新更多的文章,祝我们终将自由。