
单链表作为线性表的经典实现,凭借灵活的内存分配优势广泛应用,但正向遍历的特性也让 “反转” 操作成为高频考点。今天就用一段简洁代码,拆解单链表反转的核心思路。
单链表的反转本质是调整节点指针指向,将原本 “后继指向” 改为 “前驱指向”。给定代码中,通过三个指针(first、second、third)实现高效反转:初始化时 first 为 NULL(作为反转后链表的尾节点),second 指向原链表头节点的下一个有效节点,third 用于暂存后续节点。
循环核心逻辑很清晰:每次用 third 保存 second 的下一个节点,避免指针断裂;接着将 second 的 next 指向 first,完成当前节点的反转;随后 first 和 second 依次后移,直到 second 为空,此时 first 恰好是反转后链表的头节点。最后通过 initlist () 创建新表头,将其 next 指向 first,完成整个链表的反转重构。
这段代码的巧妙之处在于仅用 O (1) 额外空间完成 O (n) 时间复杂度的反转,无需借助栈或数组,是单链表反转的最优解法之一。掌握指针的交替移动逻辑,就能轻松搞定单链表反转问题~