题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
思路:
1、创建1个节点0号节点,指向头结点
2、链表执行下面的交换
即让0号节点指向2,2号节点执行1,1号节点指向2
3、下一轮循环,让1成为0号节点,3成为1号节点
Python:
# 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]:
# next=head 指的是创建的对象指向的是链表的头结点
node0=dummy=ListNode(next=head)
node1=head
# 至少存在两个节点时,才会进入循环
while node1 and node1.next:
node2=node1.next
node3=node2.next
# 0->2
node0.next=node2
# 2->1
node2.next=node1
# 1->3
node1.next=node3
# 下一轮循环,0是1
node0=node1
# 1是3
node1=node3
# 返回新链表的头结点
return dummy.next
复杂度分析
时间复杂度:O(n),其中 n为链表长度。
空间复杂度:O(1)。仅用到若干额外变量。