You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表首尾第k个节点值交换:我的Python解法为何与其他方案不同?

链表节点值交换问题的解法误区分析

问题回顾

给定链表的头节点head和整数k,交换链表中从开头数第k个节点与从结尾数第k个节点的值(链表为1索引),返回交换后的链表头节点。

你的解法代码

head = [7,9,6,6,7,8,3,0,9,5]
k = 5
swap_1 = head[k-1]
swap_2 = head[-k]
head[k-1] = swap_2
head[-k] = swap_1
print(head)

你的解法错误原因

你把题目中的链表头节点当成了Python普通列表来处理,但实际题目里的head是链表节点对象(通常定义如下),不是可直接索引访问的列表:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

链表的节点是通过next指针依次串联的,无法像列表那样用head[k-1]直接定位到第k个节点,这种写法在实际题目测试中会直接抛出类型错误。

和标准解法的差异

网上的长代码是针对链表结构的正确解法,核心逻辑是先找到目标节点再交换值,常见步骤:

  • 方法一:先遍历链表统计总长度n,计算出倒数第k个节点对应正数第n-k+1个节点,再分别遍历找到这两个节点,交换它们的val属性。
  • 方法二:用快慢指针,快指针先向前走k-1步定位到正数第k个节点;之后快慢指针同步向前移动,直到快指针走到链表末尾,此时慢指针就是倒数第k个节点,最后交换两个节点的val。
  • 两种方法都不需要修改链表的指针结构,仅交换节点的值,最后返回原头节点即可。

内容的提问来源于stack exchange,提问作者saipavan davaleswarapu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:42:15