Leetcode -2

Leetcode

  • Leetcode -234.回文链表
  • Leetcode -160.相交链表

Leetcode -234.回文链表

题目:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:
输入:head = [1, 2, 2, 1]
输出:true

示例 2:
输入:head = [1, 2]
输出:false

提示:
链表中节点数目在范围[1, 10^5] 内
0 <= Node.val <= 9

我们的思路是,把链表分为两个部分,以中间的结点为分界线,分为前半部分和后半部分,如果有两个中间结点,以第一个中间结点为标准;以1->2->2->1->NULL为例,如图:

在这里插入图片描述

然后反转以mid为中间结点的后半部分的链表,即反转以mid->next为头的链表;如下图:

在这里插入图片描述

反转完成的链表:

在这里插入图片描述

注意反转过程中改变了链表的结构,应该在返回前把反转的部分反转回来;下面看代码以及注释:

		//找到链表前半部分的函数struct ListNode* SLFindMid(struct ListNode* head){struct ListNode* slow = head, * fast = head;while (fast->next && fast->next->next){slow = slow->next;fast = fast->next->next;}return slow;}//反转链表的函数struct ListNode* SLReverse(struct ListNode* head){struct ListNode* curr = head, * prev = NULL;while (curr){struct ListNode* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}bool isPalindrome(struct ListNode* head){//通过SLFindMid函数找到链表的前半部分,返回的是前半部分的尾指针//SLReverse函数反转后半部分的链表struct ListNode* mid = SLFindMid(head);struct ListNode* reverse = SLReverse(mid->next);//p1从头开始,p2从反转后后半部分链表的头开始struct ListNode* p1 = head;struct ListNode* p2 = reverse;//p1和p2通过迭代比较,当p2不为空则继续比较,p2为空说明前半部分和后半部分比较完了while (p2){if (p1->val == p2->val){p1 = p1->next;p2 = p2->next;}//如果比较途中遇到不相等,返回falseelse{//把反转的后半部分反转回来,保持链表为原来的结构SLReverse(reverse);return false;}}//最后把反转的后半部分反转回来,保持链表为原来的结构SLReverse(reverse);return true;}

Leetcode -160.相交链表

题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。
如果两个链表不存在相交节点,返回 null 。

我们的思路是,分别计算两个链表的长度,再计算它们的差值gap,然后让长的那一个链表先走gap步,使它们从长度相同的结点出发比较;

		struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB){//从头遍历两个链表,计算它们的长度struct ListNode* tailA = headA, * tailB = headB;int lenA = 0, lenB = 0;while (tailA){lenA++;tailA = tailA->next;}while (tailB){lenB++;tailB = tailB->next;}//gap计算它们的差值,abs为取绝对值int gap = abs(lenA - lenB);//假设A链表为长的那一个链表,B为短的链表struct ListNode* longlist = headA, * shortlist = headB;//判断A和B谁是比较长的链表if (lenA < lenB){longlist = headB;shortlist = headA;}//让长的链表先走gap步while (gap--){longlist = longlist->next;}//两个链表从长度相同的结点出发比较while (longlist != shortlist){longlist = longlist->next;shortlist = shortlist->next;}return longlist;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/188879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新AI创作系统ChatGPT系统运营源码+支持GPT-4多模态模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

2023年03月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列说法不正确的是?( ) A:可以从声音库中随机导入声音 B:可以录制自己的声音上传 C:可以修改声音的大小 D:不能修改声音的速度 答案:D 针对声音可以进行导入,上传,修改…

vue监听对象属性值变化

一、官方文档 二、实现方法 方法一、直接根据watch来监听 export default {data() {return {object: {username: ,password: }}},watch: {object.username(newVal, oldVal) {console.log(newVal, oldVal)}} }方法二&#xff1a;利用watch和computed来实现监听 利用computed定…

springcloud新闻发布系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;nodejs&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索新闻&#xff0c;新闻分类&#xff0c;新闻列表…

我的 2023 秋招总结,拿到了大厂offer

2023秋招小结 前言 & 介绍 作为2024年毕业的学生&#xff0c;在2023年也就是今年秋招。 现在秋招快结束了&#xff0c;人生可能没有几次秋招的机会&#xff08;应该就一次&#xff0c;最多两次吧哈哈&#xff09;&#xff0c;也有一点感悟&#xff0c;所以小小总结一下。…

音频类型转换工具-可执行文件exe/dmg制作

朋友车载音乐需要MP3格式&#xff0c;想要个批量转换工具 准备工作 brew install ffmpeg --HEAD或者官网下载安装ffmpeg并配置环境conda install ffmpeg 或者pip install ffmpeg-python 音频类型转换程序.py文件 exe文件在windows下打包&#xff0c;dmg在macos下打包&#…

quickapp_快应用_tabBar

tabBar 配置项中配置tabBar(版本兼容)使用tabs组件配置tabBar语法示例问题-切换tab没有反应问题-数据渲染问题解决优化 问题-tab的动态配置 第三方组件tabbar 一般首页都会显示几个tab用于进行页面切换&#xff0c;以下是几种tab配置方式。 配置项中配置tabBar(版本兼容) 在m…

C语言一个奇奇怪怪的小细节(定制初始化中的一个坑)

在今天写C代码的过程中&#xff0c;发现了一个奇怪的现象&#xff1a; 假设我们有如下数据结构&#xff1a; struct AddressMapping {u64 lba;union{u64 addr;u64 addrPage;struct ScatterIter sgiter;};u64 size; }__attribute__ ((__packed__));struct ScatterIter{struct Sc…

一文看分布式锁

为什么会存在分布式锁&#xff1f; 经典场景-扣库存&#xff0c;多人去同时购买一件商品&#xff0c;首先会查询判断是否有剩余&#xff0c;如果有进行购买并扣减库存&#xff0c;没有提示库存不足。假如现在仅存有一件商品&#xff0c;3人同时购买&#xff0c;三个线程同时执…

最新自动定位版本付费进群系统源码

更新内容&#xff1a; 1.在网站首页增加了付款轮播功能。 2.新增了城市定位功能&#xff0c;方便用户查找所在城市的相关信息。 3.对域名库及支付设置进行了更新和优化。 4.增加了一种图模板设置模式&#xff0c;简化了后台模板设置流程。 5.此外还进行了前后台的其他优化…

ClickHouse的分片和副本

1.副本 副本的目的主要是保障数据的高可用性&#xff0c;即使一台ClickHouse节点宕机&#xff0c;那么也可以从其他服务器获得相同的数据。 Data Replication | ClickHouse Docs 1.1 副本写入流程 1.2 配置步骤 &#xff08;1&#xff09;启动zookeeper集群 &#xff08;2&…

【蓝桥杯省赛真题01】C++水下探测器 第十届蓝桥杯中小学生创意编程大赛C++编程比赛省赛真题解析

目录 C/C++水下探测器 一、题目要求 1、编程实现 2、输入输出 二、算法分析