面试知识库
进阶

链表高频操作#

一句话答案#

链表核心操作:反转(三指针迭代)、检测环(快慢指针)、合并有序(归并)、找中间节点(快慢指针)。

核心要点

反转链表: prev=null, curr=head, 循环 {next=curr.next; curr.next=prev; prev=curr; curr=next}

检测环: 快2慢1,相遇有环;找入口:一个从head一个从相遇点同速走再相遇

高频题: 反转链表 / K个一组翻转 / 合并K个有序(小顶堆) / 回文链表(找中点+反转后半)

面试回答(2分钟版)

链表题的两大核心技巧是三指针反转和快慢指针。反转链表用三个指针prev、curr、next:每次先保存curr.next到next,然后把curr的next指向prev完成掉头,再把prev和curr各前进一步,循环结束后prev就是新的头节点。快慢指针是一快一慢两个指针同时走,用途非常广:快指针走两步慢指针走一步,如果相遇说明有环,找环入口就让一个指针回到head两个同速走再相遇就是入口;慢指针走到终点时就是链表中间节点;快指针先走K步然后两个同速走,慢指针到终点时就是倒数第K个节点。高频题包括反转链表、K个一组翻转、合并K个有序链表用小顶堆、判断回文链表先找中点再反转后半段比较。链表题最容易出错的是空指针,操作前一定要检查node和node.next是否为null,养成用dummy头节点简化边界处理的习惯。

追问与易错

追问方向:

  • “反转链表递归和迭代哪个好?”→ 迭代更优:O(1) 空间且不会栈溢出;递归写法简洁但空间 O(n),长链表有爆栈风险,面试中建议先写迭代再提递归
  • “找链表倒数第 K 个节点?”→ 快慢指针法:快指针先走 K 步,然后快慢同时走,快指针到末尾时慢指针即为倒数第 K 个,一次遍历 O(n)
  • “判断回文链表怎么做?”→ 快慢指针找中点 → 反转后半段 → 逐一比较前后两半 → 恢复链表结构;时间 O(n) 空间 O(1)

易错点:

  • ❌ 链表操作不需要考虑空指针——边界条件最容易出错
  • ❌ 快慢指针只能检测环——还能找中点/倒数第K个