1721. 交换链表中的节点
Question
给你链表的头节点 head 和一个整数 k 。
交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。
Example 1:
输入:head = [1,2,3,4,5], k = 2 输出:[1,4,3,2,5]
Example 2:
输入:head = [7,9,6,6,7,8,3,0,9,5], k = 5 输出:[7,9,6,6,8,7,3,0,9,5]
Example 3:
输入:head = [1], k = 1 输出:[1]
提示:
- 链表中节点的数目是 n
- 1 <= k <= n <= 105
- 0 <= Node.val <= 100
Approach 1: 遍历搜索(超时)
自己思考没想出什么特别的计算手段,就想到遍历链表找到前k和后k个结点,然后进行交换
1 | class Solution: |
复杂度分析
- 时间复杂度:O(n+q),其中 n 是链表的节点数量,p是倒数第k个结点是链表的第p个结点。
- 空间复杂度:O(1),增加了常数个指针。
Approach 2: 快慢指针
快慢指针用法挺多 1.n等分 2.检测有无环 3.从后数第几个
1 | class Solution: |
复杂度分析
- 时间复杂度:O(n)。其中
n
为链表的长度。 - 空间复杂度:O(1)。需要额外的常数大小的辅助空间。