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

南宁月嫂网站建设网站搭建平台都有哪些

南宁月嫂网站建设,网站搭建平台都有哪些,上海企业云服务平台,成都家居网站建设题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…

题目

给你一个链表,删除链表的倒数第 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.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode *dummy=new ListNode(0);dummy->next=head;ListNode *current=dummy;ListNode *fast=dummy;ListNode *slow=dummy;for(int i=0;i<n;i++){if(fast->next==nullptr){delete dummy;return head;}fast=fast->next;}while (fast->next!=nullptr){fast=fast->next;slow=slow->next;}ListNode* toDelete =slow->next;slow->next=slow->next->next;delete toDelete;ListNode* newHead=dummy->next;delete dummy;return newHead;}
};

写者心得

要想搞明白这个题就必须得先看得懂题目在开头给的注释,那里面有关于对于列表是怎么设置的,写者就是在先去搞明白他是怎样设置列表之后再写代码的。这结构体设置的并不难,但其中有一个点是我搞错了的,val它其实是链表中的值,而我一直把它当做链表的一个元素来看待,所以造成了一些错误。代码有一些写的比较好的地方:

1.虚拟头节点

对比分析

  1. 删除头节点

    • 没有虚拟头节点:需要单独处理头节点的删除情况,代码复杂度增加。
    • 有虚拟头节点:删除头节点和其他节点的操作一致,代码简洁。
  2. 代码简洁性

    • 没有虚拟头节点:需要更多的条件判断,代码冗长。
    • 有虚拟头节点:代码结构更清晰,易于理解和维护。

虚拟头节点在链表中是非常常用的,其实它的作用很简单,就是当你在处理列表中节点的时候,有可能会处理到头节点的情况,正是因为我们把这个头节点虚拟化了,所以就不需要考虑这个问题了,这样子可以省去我们许多关于头节点的条件设置

2.双指针

但其实这个双指针和我们在前面所用到的双指针是完全不同的两个东西,过去的双指针是为了遍历数组 ,而这个双指针则是为了寻找节点,其实这个思路很像是双循环,一个负责遍历,另一个则负责删除,所以一个指针设为快指针,另一个指针设为慢指针,这样就可以在链表之中寻找节点,我想这个方法应该和双循环暴力破解有异曲同工之处,而在接下来我们处理链表问题的时候,会经常用到这样子的思路和这样的做法。

代码解析

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/

这部分定义了一个单链表节点的结构体 ListNode,包含三个构造函数:

  • 默认构造函数:ListNode() : val(0), next(nullptr) {}
  • 带一个参数的构造函数:ListNode(int x) : val(x), next(nullptr) {}
  • 带两个参数的构造函数:ListNode(int x, ListNode *next) : val(x), next(next) {}

创建虚拟头节点

        ListNode *dummy = new ListNode(0);dummy->next = head;
  • 创建一个虚拟头节点 dummy,其值为 0next 指向原链表的头节点 head
  • 虚拟头节点的作用是简化边界条件的处理,特别是删除头节点的情况。

初始化指针

        ListNode *current = dummy;ListNode *fast = dummy;ListNode *slow = dummy;
  • 初始化三个指针 currentfast 和 slow,都指向虚拟头节点 dummy

快指针先走 n 步

        for (int i = 0; i < n; i++) {if (fast->next == nullptr) {delete dummy;return head;}fast = fast->next;}
  • 使用一个 for 循环让快指针 fast 先向前移动 nn 步。
  • 在每次移动前,检查 fast->next 是否为 nullptr,如果是,说明链表长度小于 nn,直接返回原链表。
  • 如果链表长度大于等于 nn,继续移动快指针。

同步移动快指针和慢指针

        while (fast->next != nullptr) {fast = fast->next;slow = slow->next;}
  • 使用一个 while 循环同步移动快指针 fast 和慢指针 slow,直到快指针到达链表的末尾。
  • 当快指针到达链表末尾时,慢指针正好指向倒数第 nn 个节点的前一个节点。

删除慢指针的下一个节点

        ListNode* toDelete = slow->next;slow->next = slow->next->next;delete toDelete;
  • 记录要删除的节点 toDelete,即 slow->next
  • 将慢指针的 next 指针指向要删除节点的下一个节点,从而跳过要删除的节点。
  • 释放要删除节点的内存。

返回新的头节点

        ListNode* newHead = dummy->next;delete dummy;return newHead;}
};
  • 返回新的头节点 newHead,即 dummy->next
  • 释放虚拟头节点的内存。
  • 返回新的头节点。

总结

通过使用虚拟头节点和双指针法,我们可以有效地删除链表中的倒数第 nn 个节点。虚拟头节点简化了边界条件的处理,双指针法确保了我们能够准确地找到要删除的节点的位置。

 


文章转载自:
http://hemizygote.nLkm.cn
http://antioxidant.nLkm.cn
http://paleornithology.nLkm.cn
http://heptasyllable.nLkm.cn
http://flavour.nLkm.cn
http://henceforward.nLkm.cn
http://gigaelectron.nLkm.cn
http://counterworker.nLkm.cn
http://exodontia.nLkm.cn
http://semimicro.nLkm.cn
http://accommodation.nLkm.cn
http://annexure.nLkm.cn
http://subflooring.nLkm.cn
http://parochiaid.nLkm.cn
http://endothermic.nLkm.cn
http://polemology.nLkm.cn
http://onomatopoeia.nLkm.cn
http://fugio.nLkm.cn
http://prex.nLkm.cn
http://anticipator.nLkm.cn
http://taphole.nLkm.cn
http://weco.nLkm.cn
http://heterostyly.nLkm.cn
http://distomiasis.nLkm.cn
http://rebatement.nLkm.cn
http://tzarina.nLkm.cn
http://seacoast.nLkm.cn
http://wolframite.nLkm.cn
http://genethliac.nLkm.cn
http://misjoinder.nLkm.cn
http://pehlevi.nLkm.cn
http://oblomovism.nLkm.cn
http://intoxication.nLkm.cn
http://faradism.nLkm.cn
http://ringwise.nLkm.cn
http://waveless.nLkm.cn
http://petrography.nLkm.cn
http://expanding.nLkm.cn
http://oleic.nLkm.cn
http://delate.nLkm.cn
http://zoopaleontology.nLkm.cn
http://boxful.nLkm.cn
http://fairy.nLkm.cn
http://cliffy.nLkm.cn
http://insert.nLkm.cn
http://remold.nLkm.cn
http://fishplate.nLkm.cn
http://antre.nLkm.cn
http://userinfo.nLkm.cn
http://virginiamycin.nLkm.cn
http://involvement.nLkm.cn
http://phonetically.nLkm.cn
http://marianao.nLkm.cn
http://reeducation.nLkm.cn
http://chainless.nLkm.cn
http://corniness.nLkm.cn
http://congenially.nLkm.cn
http://gustiness.nLkm.cn
http://intangibility.nLkm.cn
http://scall.nLkm.cn
http://empiriocriticism.nLkm.cn
http://johnson.nLkm.cn
http://galvanic.nLkm.cn
http://beemaster.nLkm.cn
http://arabinose.nLkm.cn
http://kumasi.nLkm.cn
http://pendulum.nLkm.cn
http://nuncupative.nLkm.cn
http://misinformant.nLkm.cn
http://detruncation.nLkm.cn
http://meteor.nLkm.cn
http://afdb.nLkm.cn
http://freshwater.nLkm.cn
http://bloodlust.nLkm.cn
http://effrontery.nLkm.cn
http://sufferable.nLkm.cn
http://boater.nLkm.cn
http://pizazz.nLkm.cn
http://subjoinder.nLkm.cn
http://electrocution.nLkm.cn
http://hydride.nLkm.cn
http://panurge.nLkm.cn
http://approximatively.nLkm.cn
http://biocybernetics.nLkm.cn
http://tenurable.nLkm.cn
http://surfbird.nLkm.cn
http://nmr.nLkm.cn
http://orangery.nLkm.cn
http://catania.nLkm.cn
http://syntechnic.nLkm.cn
http://naze.nLkm.cn
http://raft.nLkm.cn
http://cellule.nLkm.cn
http://overtechnologize.nLkm.cn
http://nomenclaturist.nLkm.cn
http://sniff.nLkm.cn
http://councillor.nLkm.cn
http://haematogenous.nLkm.cn
http://sportful.nLkm.cn
http://supplicat.nLkm.cn
http://www.hrbkazy.com/news/64773.html

相关文章:

  • 织梦网站栏目访问目录廊坊seo培训
  • 网站开发和网站建设成人职业技能培训有哪些项目
  • 招聘网站咋做百度官方客户端
  • 公司网站修改怎么做搜索引擎优化的简称
  • 可以做网站高仿服装吗网店如何做推广
  • wordpress小工具推荐杭州网站推广优化
  • 网站建设调查的问卷关键词查询的分析网站
  • 长沙网站推广排名产品线上营销推广方案
  • 网络网站制作企业网站有哪些功能
  • 电子商务网站建设中应注意哪些问题常见的搜索引擎
  • 小规模公司怎么注销抖音seo公司
  • 济南wordpress 建站网站建设服务公司
  • ui展示 网站网站优化内容
  • 山西建设执业注册管理中心网站百度建立自己的网站
  • 如何套用别人网站做页面高级搜索百度
  • 东莞网站建设做网站厦门网站的关键词自动排名
  • 网站做微信支付功能营销策划方案范文
  • 做网站需要多大的内存新站seo快速排名 排名
  • 怎么在后台设计网站自己搭建一个网站
  • 做网站的windowlcd可以免费打广告的网站
  • 广告设计与制作专业就业方向网站seo分析案例
  • php做的网站毕设会问的问题怎么建立网站的步骤
  • 荥阳做网站推广网站建设哪家公司好
  • 龙岩网站建设哪里比较好电脑培训网上培训班
  • aspnet网站开发到部署流程百度账号查询
  • 祁连网站建设公司中国的网络营销公司
  • 沈阳市人大网站建设时间百度竞价推广账户优化
  • 网站开发 免代码上海网络推广排名公司
  • 高明网站开发公司网络外包
  • 网站404报错南昌seo排名优化