leetcode 19. 删除链表的倒数第 n 个结点 js实现_蓓蕾心晴-编程思维

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

 

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

原题地址

 

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
//  使用双指针
// 第一个指针先走 n 步,然后两个指针一起走,当第一个指针到达末尾的时候,第二个指针刚好指向被删除的节点位置
// 为了找到被删除的节点的上一个节点,方便删除,所以定义一个哑结点,作为 second 指针
var removeNthFromEnd = function(head, n) {
    if(!head){
        return head
    }
    // 定义哑节点
    let dummy = new ListNode();
    // 将哑结点下一个指向 head
    dummy.next = head;
    // 定义第一个指针
    let first = head;
    // 定义第二个指针指向哑结点
    let second = dummy;
    // 先将第一个指针走 n 步
    for(let i=0;i<n;i++){
        first = first.next;
    }
    // 两个指针同时走,当 first节点不存在,在停止遍历
    while(first){
        first = first.next;
        second = second.next;
    }
    // 这时的 second 刚好是要删除的节点的上一个节点,改变节点的指向
    second.next = second.next.next;
    // 返回哑结点的下一个节点
    return dummy.next;
};

参考官方题解

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/beileixinqing/p/16923859.html

06#web 实战:实现可滑动的标签页_enziandom-编程思维

实现效果图 本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程。👉我的 Gitee 和 GitHub 地址。注意哦:这个只是 PC 上的标签页,手机端的没用,因为监听器是 mouse,而不是手势。 在线浏览地址:10.标签页。 构建静态页面 可滑动的页面需要 5 个 div,

redux 的困扰与如何技术选型_hh54188-编程思维

文章的名字我想了很久,备选项有“我再不推荐 Redux”,“Redux 为什么令我头疼”,“Redux 进化启示录”等等。通过这一系列名字我想你大概能猜到我接下来想聊的问题是什么,但这个问题放眼望去不是 Redux 独有,而是在做技术决策时经常会遇到的,即使对于非前端背景的开发者也同样成立。最后决定用一个带有开放式标题

js 为array实现一个reader,通过接口getreader获取,reader 有一个接口 read(n)_蓓蕾心晴-编程思维

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)每次调用会按顺序读区数组的n(默认为1)个元素,调用不会改变数组本身的值,若数组已全部读取完则返回空数组,若传入的参数不为正整数则抛出异常例: const arr = [1, 2, 3, 4, 5, 6] con

leetcode 88. 合并两个有序数组 js实现_蓓蕾心晴-编程思维

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情

嘿,vue中keep-alive有个「大坑」你可能还不知道 - 编程思维

背景背景是这样的,我们使用vue2开发一个在线客服使用的IM应用,基本布局是左边是访客列表,右边是访客对话,为了让对话加载更友好,我们将对话的路由使用<keep-alive>缓存起来。但是如果将所有对话都缓存,未必会造成缓存过多卡顿的问题。自然,就使用上了<keep-alive>提供的max属性

leetcode 88. 合并两个有序数组 js实现_蓓蕾心晴-编程思维

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情

4ever-bucket 优于市场的优势 - 编程思维

分散存储用户可以将数据存储在去中心化存储系统中,而无需考虑数据的中央孤岛。此外,与集中式存储解决方案相比,分散化有助于提高隐私和安全性。此外,它利用运营商和用户的对等网络来管理数据。因此,它有助于在存储和传输过程中确保数据安全。它还使用了基于区块链的系统或点对点网络。结果,企业以多种方式从这种传播功能中受益。此外,去中