多指针法反转链表(面试常考题)|刷题打卡

92 阅读1分钟

一、题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

提示:

  • 0 <= 节点个数 <= 5000

二、思路分析

反转链表,就是把每个结点 next 指针的指向给反过来就行了
需要用到三个指针,它们分别指向目标结点(cur)、目标结点的前驱结点(pre)、目标结点的后继结点(next)

cur.next = pre:进行反转 。
next用于指向 cur 原本的后继结点,用于定位下一个结点。

image.png

三、AC 代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
  // 初始化前驱结点为 null
    let pre = null;
    // 初始化目标结点为头结点
    let cur = head;
    while (cur) {
        // 记录next 结点
        let next = cur.next;
        // 反转指针
        cur.next = pre;
        // 记录pre以便后续的反转
        pre = cur;
        // cur往前走一步
        cur = next;
    }
    // 反转结束后,pre 为新的头结点
    return pre
};

四、总结

  • 处理链表的本质,是处理链表结点之间的指针关系

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情