当前位置: 首页 > news >正文

企业网站建设的步骤过程/北京出大大事了

企业网站建设的步骤过程,北京出大大事了,旅行社网站程序,深圳直销软件开发公司文章目录 第一部分:题目描述第二部分:代码实现2.1 快慢指针法2.2 递归 第一部分:题目描述 🏠 链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) ⭐ 难度:中等 第二部分&#…

文章目录

  • 第一部分:题目描述
  • 第二部分:代码实现
    • 2.1 快慢指针法
    • 2.2 递归

第一部分:题目描述

🏠 链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

⭐ 难度:中等

image-20230513080722075

第二部分:代码实现

2.1 快慢指针法

快慢指针,p1 指向待删节点的上一个,p2 先走 n + 1 步。

步骤:

  1. 快慢指针都指向哨兵 sentinel (创建sentinel节点,将 sentinel 的下一个节点设置为头节点 head)。
  2. fast 向后移动 n+1 个位置,使得 slow 与 fast 保持了 n+1 个距离。
  3. fast 和 slow一起向后移动(移动相同距离),直到 fast 到最后一个节点的下一个节点( null )。fast 和 slow 始终保持着 n+1 个位置的距离。要删除的倒数的第 n 个节点,就是 slow 的下一个节点。
  4. 删除节点就是将 改变 slow 的下一个节点为 slow 的下下个节点。
  5. 返回真正的头节点,就是 sentinel 的下一个节点。

图解分析:

已知链表 1 -> 2 -> 3 -> 4 -> 5,需要删除倒数第 2 个节点(n = 2)

image-20230514001541285

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {// 链表:sentinel -> 1 -> 2 -> 3 -> 4 -> 5// n = 2,应当删除节点4// 哨兵节点,作为伪头节点ListNode sentinel = new ListNode(-1, head);// 快指针ListNode fast = sentinel;// 慢指针ListNode slow = sentinel;// 先将 快指针 移动到 慢指针 n+1 个位置后// 移动后 fast 指向 3,slow 指向 sentinelwhile (n > -1) {fast = fast.next;n--;}// 将快慢指针向后移动,知道 快指针到了最后一个节点的下一个节点 null// 此时 慢指针 指向节点的 下一个节点就是待删除的节点 (val = 3)while (fast != null) {slow = slow.next;fast = fast.next;}// 将当前慢指针指向节点的下一个节点更改为 待删除节点的下一个节点// 那么此时 3 -> 5slow.next = slow.next.next;// 返回真正的头节点return sentinel.next;}
}

为什么要设置一个sentinel

Answer:主要是考虑待删除的节点正好是头节点 head 的情况。我们知道在单链表中我们想要删除一个节点需要依靠它的上一个节点,而头节点head没有上一个节点,因此我们暂时给 head 前面加一个伪头节点 sentinel 指向 head。这样就能像其它节点一样通过待删除节点的上一个节点来删除待删除的节点。

2.2 递归

思路:写一个递归函数,用来返回下一个节点的倒数序号。

recursion(ListNode p=1, int n=2) {recursion(ListNode p=2, int n=2) {recursion(ListNode p=3, int n=2) {recursion(ListNode p=4, int n=2) {recursion(ListNode p=5, int n=2) {recursion(ListNode p=null, int n=2) {return 0; // 最内层序号0}return 1; // 上一次返回值+1}return 2;}if(返回值 == n == 2) {// 删除 next}return 3;}return 4;}return 5;
}

但上述代码有一个问题,就是若删除的是第一个节点,它没有上一个节点,因此可以加一个哨兵来解决。

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode sentinel = new ListNode(-1, head);recursion(sentinel, n);return sentinel.next;}/*** @param p 当前节点* @param n 需要删除倒数第 n 个节点* @return 当前节点为 倒数第几个节点*/private int recursion(ListNode p, int n) {// 如果无节点了,就返回 0if (p == null) {return 0;}// nth 代表的是下一个节点的倒数位置int nth = recursion(p.next, n);// 如果下一个节点是 第 n 个节点,就需要删除下一个节点if (nth == n) {p.next = p.next.next;}// 当前节点的倒数位置 nth + 1return nth + 1;}
}

Question:p.next.next 不怕空指针吗?

Answer:

  • p 是待删除节点的上一个节点,如果能递归回到 p,那么 p.next 肯定有值,不会是 null
  • 且题目说明了 n >=1,不会因为 nth == 0 而让 p.next 指向最后的 null
http://www.jmfq.cn/news/4912057.html

相关文章:

  • 免费做店招的网站/贵港seo
  • 合作公司做网站/搜索引擎关键词优化方案
  • 网站建设的基本规范有什么/北京seo营销培训
  • 做网站不会写代码/泰州网站排名seo
  • 网站建设策划报价/舆情报告范文
  • 东莞网站推广策划活动/创网站永久免费建站
  • 网站建设专业的公司哪家好/线上宣传推广方式
  • wordpress 经过天数/win7最好的优化软件
  • 网站开发中的paml/查网站流量查询工具
  • 宿州网站建设/徐州百度搜索网站排名
  • 直聘最新招聘信息/无排名优化
  • 那个网站上有做婚礼布场样图的/发新闻稿平台
  • 建设英文网站的公司/富阳seo关键词优化
  • 唯品会一家专门做特卖的网站/数字营销网站
  • 增城网站建设价格/南宁网站seo
  • 深圳做网站新科/百度刷seo关键词排名
  • 05网站/今日头条新闻头条
  • 网站内容授权书/买友情链接有用吗
  • 深圳福田区住房和建设局网站官网/国际新闻界官网
  • 做视频网站要用到的服务器/全网万能搜索引擎
  • 网站不想被收录/朝阳seo排名优化培训
  • 用个人电脑做网站服务器/用广州seo推广获精准访问量
  • 企业网站建设版本/网络营销推广实战宝典
  • 国外有哪些做deal的网站/如何联系百度客服
  • 网站开发功能清单/网络平台
  • 学做ppt的网站 免费下载/网络营销工具包括
  • 网站专题策划页面怎么做/今天国内最新消息
  • 装修设计方案/重庆优化seo
  • 课程网站开发卷宗/百度资源站长平台
  • 怎么做才能提升网站收录/网站测试