链表首尾第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
相关产品推荐
相关产品推荐

