剑指offer--反向链表

88 阅读1分钟

双指针迭代

我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。 第二个指针 cur 指向 head,然后不断遍历 cur。 每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。 都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。 动画演示如下:

pic.leetcode-cn.com/7d8712af4fb…

var reverseList = function(head) {
    // 判断下变量边界问题
    if (!head || !head.next) return head;
    // 初始设置为空,因为第一个节点反转后就是尾部,尾部节点指向 null
    let pre = null;
    let current = head;
    let next;
    // 判断当前节点是否为空
    // 不为空就先获取当前节点的下一节点
    // 然后把当前节点的 next 设为上一个节点
    // 然后把 current 设为下一个节点,pre 设为当前节点
    while(current) {
        next = current.next;
        current.next = pre;
        pre = current;
        current = next;
    }
    return pre;
};