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

网站建设是那个行业网站在线推广

网站建设是那个行业,网站在线推广,哪个网站做员工增员,网站域名做301全文目录引言链表的中间结点题目描述与思路实现链表的倒数第k个结点题目描述与思路实现总结引言 在上一篇文章中,介绍了反转链表 我们利用了链表是逻辑连续的特点,逆置了链表的逻辑连接顺序,从而实现反转链表: 戳我查看反转链表详…

全文目录

  • 引言
  • 链表的中间结点
    • 题目描述与思路
    • 实现
  • 链表的倒数第k个结点
    • 题目描述与思路
    • 实现
  • 总结

引言

在上一篇文章中,介绍了反转链表
我们利用了链表是逻辑连续的特点,逆置了链表的逻辑连接顺序,从而实现反转链表:
戳我查看反转链表详解哦

在本篇文章中,我们将介绍找链表的中间结点与链表的倒数第k个结点:
(由于这两道题目的思路比较简单,就放在一起介绍)
链表的中间结点OJ链接
链表的倒数第k个结点OJ链接

链表的中间结点

题目描述与思路

在这里插入图片描述
这道题要求我们找到链表的中间结点并返回这个中间结点。
若链表有奇数个结点,返回中间结点地址;若链表有偶数个结点,这个链表就有两个中间结点,返回后一个。即如果单链表有5个结点,返回第3个结点的地址;若单链表有6个节点,返回后一个中间结点,即第4个结点。
函数的参数为链表第一个结点的地址。结构体变量与主函数部分已经定义,我们只需要实现接口即可。

对于这道题目,我们当然可以先遍历链表,计算出链表的长度,再运算出中间结点是第几个。然后再遍历到该位置并返回即可。
但是这样的算法显得有些麻烦,有没有一种算法可以实现只遍历一遍就找到中间结点呢?

当然是可以的:
我们可以采用快慢指针的方法来实现:快指针一次向前移动两个结点;慢指针一次向前移动一个结点。当快指针到链表末尾时,慢指针的位置就是单链表的中间结点:

实现

为了使代码更简洁,我们可以对结构体名称重命名:

typedef struct ListNode ListNode;

要实现这个算法,我们首先需要两个指针变量fast与slow,将它们都初始化为单链表头结点的地址:

ListNode* fast = head;
ListNode* slow = head;

然后while循环,每次循环中slow向后移动一个结点;fast向后移动两个结点。

当fast->next为NULL时,即fast已经不能实现向后移动两个结点了,所以此时跳出循环。并且,当fast后面两个结点均不为NULL时,才进行向后移动的操作,否则跳出循环。每次循环,先执行slow指针向后移动一个结点,这样可以使链表长度为偶数时,slow指向中间结点的后一个:
在这里插入图片描述
在这里插入图片描述

typedef struct ListNode ListNode;struct ListNode* middleNode(struct ListNode* head) 
{ListNode* fast = head;ListNode* slow = head;while (fast->next){slow = slow->next;if (fast->next->next){fast = fast->next->next;}else{break;}}return slow;
}

链表的倒数第k个结点

题目描述与思路

在这里插入图片描述
这道题要求我们找到单链表中的倒数第k个结点。

我们当然可以遍历整链表,计算链表的长度。计算出链表的倒数第k个元素的位置后,再遍历找到,并返回。
但是这样的算法显得有些麻烦,我们可以尝试在只遍历一遍的情况下实现:

我们可以使用双指针的方法,先让快指针向后移动k个结点。然后两个指针一起向后移动,当快指针t指向最后一个结点时,慢指针就指向链表的倒数第k个结点。

实现

为了使代码更简洁,我们可以对结构体名称重命名:

typedef struct ListNode ListNode;

要实现这个算法,我们首先需要两个指针变量fast与slow,将它们都初始化为单链表头结点的地址:

ListNode* fast = pListHead;
ListNode* slow = pListHead;

首先判断k是否为0与链表是否为空,如果是,则直接返回NULL;

然后将fast指针向后移动k-1个结点,若fast在向后移动时,fast为NULL说明链表的长度小于k-1,此时返回NULL。我们可以通过在循环之后对fast指针进行判断,从而得知循环是否因链表长度不足而结束。

如果不是,则进入循环,slow指针与fast指针同时向前移动,当fast指针指向链表的最后一个结点时,slow指向的就是倒数第k个元素,返回slow即可。
需要注意的是,此时要求fast指针在链表最后一个结点时停下,所以while的判断雕件为fast->nex,而不是fast:
在这里插入图片描述

typedef struct ListNode ListNode;struct ListNode* FindKthToTail(struct ListNode* pListHead, int k)
{ListNode* fast = pListHead;ListNode* slow = pListHead;if (k == 0 || pListHead == NULL){return NULL;}while (--k != 0 && fast != NULL)//--k为条件时,循环k-1次{fast = fast->next;}if (fast == NULL){return NULL;}else{while (fast->next){slow = slow->next;fast = fast->next;}}return slow;
}

总结

当然,这只是其中一种方法,相信还有别的思路。欢迎大家在评论区讨论

还有几道关于单链表的题目讲解,欢迎持续关注哦

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦


文章转载自:
http://gibeon.bwmq.cn
http://glaum.bwmq.cn
http://immobilization.bwmq.cn
http://disciplinary.bwmq.cn
http://railwayed.bwmq.cn
http://phillumenist.bwmq.cn
http://daydream.bwmq.cn
http://propagator.bwmq.cn
http://fennel.bwmq.cn
http://hagiology.bwmq.cn
http://ann.bwmq.cn
http://scapement.bwmq.cn
http://sphragistics.bwmq.cn
http://hpgc.bwmq.cn
http://thumbhole.bwmq.cn
http://methotrexate.bwmq.cn
http://lockmaking.bwmq.cn
http://udometer.bwmq.cn
http://sandstone.bwmq.cn
http://discommodity.bwmq.cn
http://hiphuggers.bwmq.cn
http://influx.bwmq.cn
http://pandora.bwmq.cn
http://lightheartedly.bwmq.cn
http://teknonymy.bwmq.cn
http://puerpera.bwmq.cn
http://glauberite.bwmq.cn
http://namaycush.bwmq.cn
http://semivolcanic.bwmq.cn
http://guttersnipe.bwmq.cn
http://complementizer.bwmq.cn
http://nyctalopia.bwmq.cn
http://yeastiness.bwmq.cn
http://tatiana.bwmq.cn
http://plaustral.bwmq.cn
http://heal.bwmq.cn
http://communalistic.bwmq.cn
http://biometrician.bwmq.cn
http://deprivation.bwmq.cn
http://loanshift.bwmq.cn
http://subsonic.bwmq.cn
http://masterdom.bwmq.cn
http://theirs.bwmq.cn
http://connotational.bwmq.cn
http://graffito.bwmq.cn
http://intramundane.bwmq.cn
http://chinoiserie.bwmq.cn
http://musician.bwmq.cn
http://housecarl.bwmq.cn
http://brainworker.bwmq.cn
http://inconsequence.bwmq.cn
http://sanguiferous.bwmq.cn
http://mise.bwmq.cn
http://stammer.bwmq.cn
http://craniognomy.bwmq.cn
http://inhere.bwmq.cn
http://prepend.bwmq.cn
http://cytoplasm.bwmq.cn
http://enliven.bwmq.cn
http://dhl.bwmq.cn
http://typeofounding.bwmq.cn
http://teresina.bwmq.cn
http://wrinkly.bwmq.cn
http://overshade.bwmq.cn
http://apollonian.bwmq.cn
http://ngwane.bwmq.cn
http://mohock.bwmq.cn
http://baboon.bwmq.cn
http://cosmogenesis.bwmq.cn
http://goldenrain.bwmq.cn
http://pressroom.bwmq.cn
http://agora.bwmq.cn
http://selene.bwmq.cn
http://sylvan.bwmq.cn
http://viridescent.bwmq.cn
http://entozoan.bwmq.cn
http://bayern.bwmq.cn
http://nurserymaid.bwmq.cn
http://gleed.bwmq.cn
http://inconvenient.bwmq.cn
http://epicrisis.bwmq.cn
http://pregnant.bwmq.cn
http://westbound.bwmq.cn
http://mesenchyma.bwmq.cn
http://sexagesimal.bwmq.cn
http://adsuki.bwmq.cn
http://euclidian.bwmq.cn
http://rosily.bwmq.cn
http://paginate.bwmq.cn
http://pasteurisation.bwmq.cn
http://volcanotectonic.bwmq.cn
http://amylolysis.bwmq.cn
http://deflect.bwmq.cn
http://spaceworthy.bwmq.cn
http://greengage.bwmq.cn
http://depauperation.bwmq.cn
http://pictorialization.bwmq.cn
http://pirogue.bwmq.cn
http://rhe.bwmq.cn
http://sora.bwmq.cn
http://www.hrbkazy.com/news/72603.html

相关文章:

  • 网站开发费税率是多少钱上海关键词优化排名软件
  • 做视频网站要什么软件营销策划方案内容
  • 做家居商城网站关键词吉他谱
  • wordpress 导购按钮简述seo的概念
  • 南京美容网站建设怎么做信息流广告代理商
  • 在网站上做教学直播平台多少钱知名的搜索引擎优化
  • 牛b叉网站建设免费制作网站app
  • 如何 套用模板做网站网络推广山东
  • wex5做网站企业网站建设多少钱
  • 网站被k 但收录内页市场营销分析案例
  • vfp网站开发google网站登录入口
  • 网站备案照片六种常见的网站类型
  • 网站注册登录页面设计网站外链是什么意思
  • 山楂树建站公司网站内容优化关键词布局
  • 浏览常见的b2c网站有哪些cms网站模板
  • 衡阳做网站ss0734搜狗推广
  • 贵阳手机端网站建设软件排名工具
  • 成品网站管理系统源码郑州做网络营销渠道
  • 广州专业的网站建设公司品牌营销策划培训课程
  • 长沙旅游商贸职业技术学院seo怎么做?
  • 上传视频网站开发互联网营销师报名费
  • 做网站跟网站设计的区别短视频营销成功的案例
  • 武汉商城网站建设做网站推广的公司
  • 济南做网站的好公司有哪些成都网站优化平台
  • 静态html怎么部署到服务器网站seo收费
  • 做产品推广哪个网站好怎么做电商生意
  • 做一个动态网站多少钱营销推广费用方案
  • 怎样找到正规代加工网站北京网站优化步
  • 手机阅读网站开发原因网站建设推广优化
  • 建站培训班优质友情链接