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

临沂做网站的公司哪里有网站优化方案案例

临沂做网站的公司哪里有,网站优化方案案例,建设公司网站都需要什么,网页网站设计公司当然可以!这段代码是 LeetCode 中一个非常经典的题目:删除链表的倒数第 N 个节点(Remove Nth Node From End of List)。 🧩题目要求: 给定一个单链表,删除链表的倒数第 n 个节点,并…

当然可以!这段代码是 LeetCode 中一个非常经典的题目:删除链表的倒数第 N 个节点(Remove Nth Node From End of List)


🧩题目要求:

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


📌题解思路:

使用 双指针法(快慢指针) + 虚拟头节点(dummy node)


🧱代码分析:

ListNode dummy = new ListNode(0);
dummy.next = head;
  • 创建一个虚拟头节点 dummy,它的 next 指向 head

  • 用于简化边界处理,比如删除第一个节点时不用单独判断。


if (head == null || head.next == null) return null;
  • 如果链表为空或者只有一个节点,直接返回 null,因为删掉最后一个节点之后就没有节点了。


ListNode fast = head;
ListNode slow = head;
while (--n > 0) fast = fast.next;
  • 初始化快慢指针。

  • 快指针先走 n - 1 步(因为一开始两个指针都在 head,这相当于间隔 n 个节点)。


while (fast.next != null) {fast = fast.next;slow = slow.next;dummy = dummy.next;
}
  • 快指针和慢指针一起走,直到快指针走到最后一个节点。

  • 此时 slow 指向的是 要被删除节点的前一个节点

  • 这段代码的问题是:你用了 dummy = dummy.next;,这其实让 dummy 跟着慢指针跑了,不太合理。dummy 应该是一直指向链表头的哨兵,不该动。


if (slow == head) return slow.next;
  • 如果要删除的是第一个节点,直接返回 head.next


dummy.next = slow.next;
return head;
  • 正常情况下,跳过当前的 slow 节点,完成删除。


⚠️这段代码的问题:

  1. dummy 不应该动。你写了 dummy = dummy.next;,这是不对的,dummy 应该固定。

  2. 判断 slow == head 有点冗余,用 dummy 可以避免这种边界判断。

  3. 实际上,只需要固定 dummy,fast 从 dummy 开始走 n 步,再 fast 和 slow 一起走到尾部。


✅更标准写法如下:

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode fast = dummy;ListNode slow = dummy;// fast 先走 n 步for (int i = 0; i < n; i++) {fast = fast.next;}// 然后 fast 和 slow 一起走,直到 fast 到尾while (fast.next != null) {fast = fast.next;slow = slow.next;}// 删除 slow 的下一个节点slow.next = slow.next.next;return dummy.next;}
}

🌟总结:

  • 使用 dummy 可以避免很多边界问题。

  • 快慢指针配合可以高效定位到倒数第 N 个节点。

  • 本题的核心技巧是:让 fast 先走 n 步,再一起走

好的!我们来画一个简单的链表图,帮助你理解 快慢指针删除倒数第 N 个节点 的过程。


🧷 假设链表如下(5个节点):

索引:     1 →  2 →  3 →  4 →  5
节点:   [1]→[2]→[3]→[4]→[5]→null

我们要 删除倒数第 2 个节点(也就是值为 4 的节点)。


📌 添加一个虚拟头节点 dummy:

dummy → [1]→[2]→[3]→[4]→[5]→null

初始状态:

fast 和 slow 都指向 dummy

🚶‍♂️fast 先走 n 步(n = 2):

第一步:

fast → [1]   slow → dummy

第二步:

fast → [2]   slow → dummy

🏃‍♂️fast 和 slow 一起走,直到 fast 到达最后一个节点:

第一轮:

fast → [3]   slow → [1]

第二轮:

fast → [4]   slow → [2]

第三轮:

fast → [5]   slow → [3]

结束循环,此时:

slow → [3]

✂️删除 slow 的下一个节点:

slow.next = slow.next.next;

也就是把 [4] 从链表中跳过,指向 [5]

dummy → [1]→[2]→[3]→[5]→null

✅最终返回 dummy.next 即是新的头节点:

[1]→[2]→[3]→[5]→null

http://www.dtcms.com/wzjs/115883.html

相关文章:

  • 在国外做外国的成人网站合法吗上海网站排名推广
  • 做公司网站需要什么天津搜狗seo推广
  • 烟台专业的做网站公司线上销售平台都有哪些
  • 电子商务网站开发教程爱站数据官网
  • 无锡网站建设外贸友情链接多少钱一个
  • 网站备案撤销再备案重庆网站制作系统
  • 建设与管理局网站哪里可以买链接网站
  • 各种广告牌图片清远网站seo
  • wordpress指定内容加密百色seo外包
  • 北京公司网站建设报价表怎么开发自己的小程序
  • 北京优秀的网站建设公司营销策划公司名字
  • 北京网站手机站建设公司电话打开网址跳转到国外网站
  • 网站数据流分析怎么做新乡搜索引擎优化
  • 谷歌网站排名内存优化大师
  • 主流的网站开发技术有长沙市seo百度关键词
  • 搜狗搜索引擎入口武汉seo网站推广
  • 深圳制作网站推荐亚马逊开店流程及费用
  • 公司建网站搭建服务器优化手机流畅度的软件
  • 网易那个自己做游戏的网站是什么百度热门排行榜
  • 做日语网站活动推广方案
  • 做网站阿里云买哪个服务器好点百度推广做二级域名
  • 菠菜网站怎么做排名泰安网站seo
  • 网站制作成品免费ui设计公司
  • 化妆品购物网站排名竞价排名是什么
  • 哪个网站的品牌特卖做的好外贸平台排行榜前十名
  • 南昌自助建站模板海门网站建设
  • 网站的ico图标做多大2345纯净版推广包
  • 百度免费网站如何建设成都电脑培训班零基础
  • 一个服务器多个网站好吗国内的搜索引擎排名
  • 网站定做一份完整的电商运营方案