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

辽宁网站建设价格新闻发布的网站

辽宁网站建设价格,新闻发布的网站,销售方案网站,价格网打不开​ ​#x1f4dd;个人主页#xff1a;Sherry的成长之路 #x1f3e0;学习社区#xff1a;Sherry的成长之路#xff08;个人社区#xff09; #x1f4d6;专栏链接#xff1a;数据结构 #x1f3af;长路漫漫浩浩#xff0c;万事皆有期待 文章目录链表OJ题(四)1. 反转…​ ​个人主页Sherry的成长之路 学习社区Sherry的成长之路个人社区 专栏链接数据结构 长路漫漫浩浩万事皆有期待 文章目录链表OJ题(四)1. 反转链表思路一 迭代法一、一般情况二、极端情况1.传入的链表为空时2.反转第一个结点指针的指向时3.反转最后一个结点指针的指向时思路二 头插法2.总结上一篇链表OJ题链接【链表OJ题(三)】链表中倒数第k个结点 链表OJ题(四) 1. 反转链表 链接206. 反转链表 描述 给你单链表的头节点 head 请你反转链表并返回反转后的链表。 示例1 输入head [1,2,3,4,5] 输出[5,4,3,2,1] 示例2 输入head [1,2] 输出[2,1] 示例3 输入head [] 输出[] 思路一 迭代法 反转一个单向链表可以看成是将链表中的每个结点的指向反向即从后一个结点指向前一个结点我们在考虑情况的时候还是可以先考虑一般情况再考虑极端情况。 一、一般情况 要使两个结点之间的指针指向反转看似用两个变量足矣直接让后一个结点指向前一个结点。但是仔细思考后发现并没有那么简单我们如果直接让后一个结点指向前一个结点那么后一个结点所指向的再后面一个结点的位置就无从知晓了。所以我们还得定义3个指针变量n1n2n3 n1记录指针指向将要反转的结点反转后要指向的位置。 n2记录指针指向将要反转的结点。 n3记录指针指向将要反转的结点的下一个结点。 在反转时首先让n2指向的结点指向n1指向的位置 然后让n1n2n3指针统一后移准备执行下一对结点之间指向的反转。 如此进行下去所有的结点指向都将反转。 二、极端情况 极端情况也就是反转第一个结点指针的指向和反转最后一个结点指针的指向以及传入的链表为空时的情况。 1.传入的链表为空时 我们可以发现若传入的链表为空那么我们根本就不需要对链表进行任何操作直接返回传入的头指针即可。如果再稍加思考当传入链表只有一个结点时我们也不需要对链表进行任何操作直接返回传入的头指针也没问题。 2.反转第一个结点指针的指向时 因为n2记录的是指针指向将要反转的结点所以当反转第一个结点指针的指向时n2指针便指向的是第一个结点。 因为在我们反转过程中就是让n2指向的结点指向n1指向的位置所以我们只需将n1的初始值赋值为NULL即可。这样反转后就让第一个结点指针指向NULL了即反转后的最后一个结点指向空。 3.反转最后一个结点指针的指向时 当最后一个结点的指针指向被反转时n2刚好指向最后一个结点 在指针反转完成后n1n2n3指针统一向后移动位置如下 我们可以发现逻辑上是没有问题的而且此时也发现了遍历链表时的终止条件和需要返回的新的头指针即当n2指针为NULL时停止遍历并且返回n1指针指向的位置。 注意 这时这3个指针统一后移时n3指针的后移将失败因为n3后移前指向的是NULL我们不能执行以下这句代码 n3 n3-next;所以我们后移n3指针前需判断其是否为空。 代码实现 struct ListNode {int val;struct ListNode *next; };struct ListNode* reverseList(struct ListNode* head) {if (head NULL || head-next NULL)//当链表为空或只有一个结点时无需操作return head;//直接返回struct ListNode* n1 NULL;//记录指针指向将要反转的结点反转后要指向的位置。struct ListNode* n2 head;//记录指针指向将要反转的结点。struct ListNode* n3 head-next;//记录指针指向将要反转的结点的下一个结点。while (n2)//n2为NULL时停止遍历{n2-next n1;//反转结点指向n1 n2;//指针后移n2 n3;//指针后移if (n3)//判断n3是否为NULLn3 n3-next;//指针后移}return n1;//返回n1指针指向的位置 }思路二 头插法 如果觉得上面这种思路有点绕的话可以看看下面这种思路将原链表的结点从头到尾一个个地拿下来头插到一个新链表中这个新链表起始时为一个空链表。 这样依次进行下去最终就能得到一个“反转后的链表”。 代码实现 struct ListNode {int val;struct ListNode *next; };struct ListNode* reverseList(struct ListNode* head) {struct ListNode* cur head;//记录当前待头插的结点struct ListNode* newhead NULL;//新链表初始时为空while (cur)//链表中结点头插完毕时停止循环{struct ListNode* next cur-next;//记录下一个待头插的结点cur-next newhead;//将结点头插至新链表newhead cur;//新链表头指针后移cur next;//指向下一个待头插的结点}return newhead;//返回反转后的头指针 }2.总结 今天我们通过两种思路分析并完成反转链表这道链表OJ题目也更加深层次了解和使用了头插法这个思路在之后的题目中将再次出现它的使用。希望我的文章和讲解能对大家的学习提供一些帮助。 当然本文仍有许多不足之处欢迎各位小伙伴们随时私信交流、批评指正我们下期见~
http://www.hkea.cn/news/14300830/

相关文章:

  • 阿里手机网站开发框架个人开发app可以上架吗
  • 网站背景音乐怎么做wordpress主题慢
  • 深圳外包企业网站用wordpress搭建博客
  • 网站路径优化法律门户网站源码
  • 网站建设创业计划书wordpress 公告栏
  • 网站弹出窗口js弄一个app大概多少钱
  • 学习做网站教程中国纵横168网站建设系统
  • 企业网站推广方式和策略wordpress文章页面微信分享代码
  • 做视频网站每部电影都要版权不同端口装 wordpress
  • 模板做的网站如何下载地址网站为什么会被挂马
  • 外贸五金网站建设微信小程序视频网站开发教程
  • 服务器 空间 虚拟主机 网站需要免费工程项目信息网
  • 网站建设所需美工建设英文品牌网站
  • 网站建设销售合作合同上海贸易公司排名
  • 贵金属交易网站源码建站公司生存难
  • 昆明乐网网站建设萝岗高端网站建设
  • 手机版自适应网站怎么做具有价值的广州做网站
  • 博物馆网站 微信 微博 建设大连无网站的企业有哪些
  • 百度竞价托管代运营公司做seo要投入什么
  • 360建筑网站网盟推广费用
  • 网站手机端首页用什么软件做做的网站百度排名没有图片显示
  • 郑州网站优化托管项目类型和阶段内容介绍
  • 国外大型门户网站国内外优秀网站设计
  • 网站建设要多钱潍坊专升本考试地点
  • 宾馆在什么网站做推广效果好91游戏中心
  • 诊断网站seo现状建设个人购物网站
  • 大良品牌网站建设wordpress论坛功能
  • 188建站系统源码做的很漂亮的网站
  • 电商网站运营团队建设方案wordpress内部优化
  • 58同城哈尔滨网站建设cute主题 wordpress