← 返回内容列表

链表反转:面试出现率最高的算法题,为什么

分享本文
链表反转:面试出现率最高的算法题,为什么

如果算法面试只能押一道链表题,十有八九是"反转链表"。它代码不过十行,却能把"指针走向"的功底考个底朝天。今天拆穿它为什么是试金石,以及如何一次写对。

"给你一个单链表的头,反转它。"——这大概是面试官最爱的一道题。它短到能写在名片上,却足够区分"背过"和"真懂"。

为什么是试金石?反转要求你同时操控 prev、cur、nxt 三个指针,且顺序一步都不能错:先存 nxt = cur.next(防断链)→ 再把 cur.next 翻向 prev → 然后 prev、cur 前移。哪怕顺序颠倒一步,链表就断或成环。能干净写出来,说明你对"指针即引用、改之前先保存"有肌肉记忆。

经典陷阱。许多人一上来就写 cur.next = prev,却忘了先保存 cur.next,下一轮就找不到后继了。还有递归写法:先反转后续子链,再把当前节点接到新尾——隐含的递推关系同样考验对链表的抽象。

它的变体家族。反转是"根题",由此长出一片题海:反转前 k 个、反转区间 [m,n]、K 个一组反转、判断回文(反转后半段比较)……今天我们把反转讲扎实,后面这一串都能举一反三。

反转链表:prev / cur / nxt 三步循环当前n1n2n3n4prev=nullcur每轮nxt = cur.next # 先保存,防断链cur.next = prev # 翻向prev = cur # 整体前移cur = nxt结果:箭头整体反向,新头为原尾

图:迭代反转的核心——三指针每次前移,cur.next 翻向 prev

参考代码(Python)

反转的核心是 prev/cur/nxt 三指针,下面给出迭代实现。

def reverse_list(head):
    prev=None; cur=head
    while cur:
        nxt=cur.next      # 先保存,防断链
        cur.next=prev     # 翻向
        prev=cur; cur=nxt # 前移
    return prev

关联推荐

评论 (0)

正文划词可点「问萝卜特」——自动发评论并由 AI 回复

加载评论中…

链表反转:面试出现率最高的算法题,为什么 | 必学必会