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

辽宁网站建设价格物流网站平台建设

辽宁网站建设价格,物流网站平台建设,wordpress硬件条件,wordpress幻灯片太卡​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表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个指针变量:n1,n2,n3

n1:记录指针指向将要反转的结点反转后要指向的位置。
n2:记录指针指向将要反转的结点。
n3:记录指针指向将要反转的结点的下一个结点。
在这里插入图片描述
在反转时,首先让n2指向的结点指向n1指向的位置,
在这里插入图片描述

然后让n1,n2,n3指针统一后移,准备执行下一对结点之间指向的反转。
如此进行下去,所有的结点指向都将反转。

二、极端情况

极端情况,也就是反转第一个结点指针的指向和反转最后一个结点指针的指向,以及传入的链表为空时的情况。

1.传入的链表为空时

我们可以发现,若传入的链表为空,那么我们根本就不需要对链表进行任何操作,直接返回传入的头指针即可。如果再稍加思考,当传入链表只有一个结点时,我们也不需要对链表进行任何操作,直接返回传入的头指针也没问题。

2.反转第一个结点指针的指向时

因为n2记录的是指针指向将要反转的结点,所以当反转第一个结点指针的指向时,n2指针便指向的是第一个结点。
在这里插入图片描述

因为在我们反转过程中就是让n2指向的结点指向n1指向的位置,所以我们只需将n1的初始值赋值为NULL即可。这样,反转后就让第一个结点指针指向NULL了(即反转后的最后一个结点指向空)。

3.反转最后一个结点指针的指向时

当最后一个结点的指针指向被反转时,n2刚好指向最后一个结点,
在这里插入图片描述

在指针反转完成后,n1,n2,n3指针统一向后移动,位置如下:
在这里插入图片描述

我们可以发现逻辑上是没有问题的,而且此时也发现了遍历链表时的终止条件和需要返回的新的头指针,即当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.15wanjia.com/news/177479.html

相关文章:

  • 网站文明建设工程包括影视广告网站
  • 网站开发工具 下载那些网站能够做推广
  • 淘宝客网站备案流程软件开发培训机构培训出来的
  • 企业商城网站多少钱优设网app安卓下载
  • 网站qq登录原理免费营销课程培训
  • 深圳网站建设哪里便宜宜昌市住房和城乡建设局网站
  • 做网站需要哪些技术知乎原来做网站后来跑国外了
  • 重庆媒体网站建设单价cnu摄影官网
  • 百度采购网官方网站网络建设公司方案
  • php完整电商网站开发源码潍坊网站建设费用
  • 北海建设网站常熟网站建设都找聚尚网络
  • 网站应急响应机制建设军队采购网官网
  • 快速搭建个人网站网站怎么做移动图片大全
  • 专业网站建设网站价格企业网站建设的方法
  • 做微站比较好的网站佛山市和城乡建设局网站首页
  • 更换网站程序深圳市网站制作最好的公司
  • 用wordpress做网站教程门户网站开发流程视频
  • 网站需求清单汕头个人网站建设
  • 跨越网站建设科技有限公司制作网络广告教学设计
  • 天河区建网站公司网站建设的意义方案
  • 长春网站建设培训班wordpress收录p
  • 河北互联思维网站建设甘肃省长城建设集团网站
  • wordpress支付宝打赏铜陵seo
  • 在线制作网站系统初中电脑做网站的软件
  • 网站建设公司公司模板建站广团
  • 三亚网站怎么制作网站前端用什么做
  • react是网站开发做刷单网站犯法吗
  • 公司做网站都需要什么流程今天高清视频免费播放
  • 崇明做网站好玩又不用实名认证的游戏
  • 怎么才可以做网站建设工程施工许可证查询网站