


可以使用双指针的方法找到正数第 k 个和倒数第 k 个节点,然后交换它们的值。具体步骤如下:
- 使用双指针找到第 k 个节点:先让一个指针
fast先走 k−1 步,slow指向头节点,此时slow就是正数第 k 个节点。 - 找到倒数第 k 个节点:继续让
fast指针向前走,同时再使用一个second指针从head开始走,当fast到达链表末尾时,second指向的就是倒数第 k 个节点。 - 交换两个节点的值:直接交换它们的
val,然后返回head。
代码实现(Python)
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swapNodes(head: ListNode, k: int) -> ListNode:
first = head
for _ in range(k - 1):
first = first.next # 正数第 k 个节点
second = head
fast = first
while fast.next: # 找到倒数第 k 个节点
fast = fast.next
second = second.next
# 交换值
first.val, second.val = second.val, first.val
return head
复杂度分析
- 时间复杂度:O(N),其中 N 是链表的长度,因为最多遍历两次链表。
- 空间复杂度:O(1),只使用了常数额外空间。
这个方法高效且简单,通过双指针技巧避免了额外的存储开销。
427

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



