文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

每日:删除链表倒数第 N 个结点

2024-12-02 23:38

关注

本文转载自微信公众号「三分钟学前端」,作者sisterAn。转载本文请联系三分钟学前端公众号。

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

示例:

  1. 给定一个链表: 1->2->3->4->5, 和 n = 2. 
  2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

解法:快慢指针

解题思路: 需要删除链表中的倒数第 n 个节点,我们需要知道的就是倒数第 n+1 个节点,然后删除删除倒数第 n+1 节点的后继节点即可

步骤:

使用 2 个指针:

然后, fast 、 slow 同步向前走,直到 fast.next 为 null

此时,fast 为最后一个节点,slow 就是倒数第 n+1 个节点,此时问题就变更为删除链表中的 slow 的后继节点

但存在一个问题,当链表长度为 n 时,fast 是前进不到 n+1 个节点位置的,所以此时有两种解决思路:

解决方案一:添加 preHead 节点

  1. const removeNthFromEnd = function(head, n) { 
  2.     let preHead = new ListNode(0) 
  3.     preHead.next = head 
  4.     let fast = preHead, slow = preHead 
  5.     // 快先走 n+1 步 
  6.     while(n--) { 
  7.         fast = fast.next 
  8.     } 
  9.     // fast、slow 一起前进 
  10.     while(fast && fast.next) { 
  11.         fast = fast.next 
  12.         slow = slow.next 
  13.     } 
  14.     slow.next = slow.next.next 
  15.     return preHead.next 
  16. }; 

解决方案二:单独处理倒数第 n 节点

  1. const removeNthFromEnd = function(head, n) { 
  2.     let fast = head, slow = head 
  3.     // 快先走 n 步 
  4.     while(--n) { 
  5.         fast = fast.next 
  6.     } 
  7.     if(!fast.nextreturn head.next 
  8.     fast = fast.next 
  9.     // fast、slow 一起前进 
  10.     while(fast && fast.next) { 
  11.         fast = fast.next 
  12.         slow = slow.next 
  13.     } 
  14.     slow.next = slow.next.next 
  15.     return head 
  16. }; 

时间复杂度:O(n)

空间复杂度:O(1)

 

来源:https://github.com/sisterAn/JavaScript-Algorithms

 

来源:三分钟学前端内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯