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;
		        }
		
		        //如果比较途中遇到不相等,返回false
		        else
		        {
		        	//把反转的后半部分反转回来,保持链表为原来的结构
		        	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.mfbz.cn/a/159449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析D

STEMA考试-计算思维-U8级(样题) 21.下面哪个图形与其它图形不同&#xff1f;&#xff08; &#xff09; A. B. C. D. 22.下列哪个选项是由下图旋转得到的&#xff1f;&#xff08; &#xff09; A. B. C. D. 23.下面哪个图形是用4个 拼成的&#xff1f;&#xff08; &#xf…

【Kingbase FlySync】界面化管控平台:2.配置数据库同步之KES>KES

【Kingbase FlySync】界面化管控平台:3.配置数据库同步之KES->KES 部署KES数据库到KES数据库同步服务1.登录KFS管理平台2.开始配置数据节点信息(1)配置node1数据节点(2)配置node2数据节点 3.KFS拓扑图配置4.开始部署5.启动同步程序并查验是否运行正常 测试同步1.从node1数据…

Android——gradle插件配置方式——dependencies和plugins

引言 我们知道Android studio 需要gradle插件进行构建和编译&#xff0c;随着AGP的升级&#xff0c;引入gradle插件也发生了变化。旧版本通过build.gradle文件中dependencies代码块引入&#xff0c;新版本通过plugins代码块引入 一、旧版本引入方式dependencies 二、新版本引入…

电子学会C/C++编程等级考试2021年06月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。输出 一行两个数,分…

Day33力扣打卡

打卡记录 最大和查询&#xff08;排序单调栈上二分&#xff09; 链接 大佬的题解 class Solution:def maximumSumQueries(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:ans [-1] * len(queries)a sorted(((a, b) for a, b in zi…

Cascade-MVSNet论文笔记

Cascade-MVSNet论文笔记 摘要1 立体匹配&#xff08;Stereo Matching&#xff09;2 多视图立体视觉&#xff08;Multi-View Stereo&#xff09;3 立体视觉和立体视觉的高分辨率输出4 代价体表达方式&#xff08;Cost volume Formulation&#xff09;4.1 多视图立体视觉的3D代价…

K8S1.23.5部署(此前1.17版本步骤囊括)及问题记录

应版本需求&#xff0c;升级容器版本为1.23.5 kubernetes组件 一个kubernetes集群主要由控制节点&#xff08;master&#xff09;与工作节点&#xff08;node&#xff09;组成&#xff0c;每个节点上需要安装不同的组件。 master控制节点&#xff1a;负责整个集群的管理。 …

Mac安装win程序另一个方案

前言 今天跟大家分享的是mac装win程序的另一个思路&#xff0c;不需要大动干戈的装双系统、虚拟机。最后分享感受&#xff0c;先说过程吧。 一、思路介绍 其实&#xff0c;就是利用CrossOver&#xff0c;这个软件的介绍大家可以自行了解。不过不得不说这玩意还是国外的人思路新…

sqlite与mysql的差异

差异点 安装过程&#xff1a;MySQL服务器通常需要单独安装&#xff0c;这涉及下载适用于特定操作系统的MySQL安装程序&#xff0c;运行安装程序并按照指示完成安装过程。SQLite作为嵌入式数据库&#xff0c;可以直接使用其库文件&#xff0c;不需要单独的安装过程。 配置和管理…

Linux操作

linux下的sh文件变成可执行文件&#xff08;可执行文件有颜色&#xff08;默认绿色&#xff09;&#xff09; chmod 777 xxx.sh Linux系统下给.sh添加可执行权限并运行 1、添加可执行权限 chmod ux xxx.sh 解释&#xff1a; chmod(change the permissions mode of a file)是…

[PHP]关联和操作MySQL数据库然后将数据库部署到ECS

在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库&#xff0c;然后将数据库部署到ECS。 1.安装PHP和MySQL 确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们&#xff1a; $ brew install php $ brew install mysql 安装mysql完成后记住这一句: …

opencv(4):颜色空间

文章目录 颜色空间RGB 人眼的色彩空间HSV 色彩空间HSLYUVYUV420&#xff1a;YUV422&#xff1a;YUV444&#xff1a; 颜色空间转换代码示例 颜色空间 不同色彩空间显示效果是不一样的。 RGB 人眼的色彩空间 HSV 色彩空间 HSV 代表色相&#xff08;Hue&#xff09;、饱和度&a…

电子学会C/C++编程等级考试2021年09月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5样例1输出 yes样例2输入 A 样例2输出 …

软件质量保护与测试(第2版)学习总结第十一章 白盒测试

错误隐藏在角落里、集聚在边界处 ----Boris Beizer 白盒测试是看源代码的&#xff0c;静态分析和动态分析 11.2 控制流测试 程序结构主要有3种 顺序结构、分支结构、循环结构 #include "stdafx.h" …

今天遇到Windows 10里安装的Ubuntu(WSL)的缺点

随着技术的发展&#xff0c;越来越多开发者转向使用 Windows Subsystem for Linux&#xff08;WSL&#xff09;在 Windows 10 上进行开发&#xff0c;也就是说不用虚拟机&#xff0c;不用准备多一台电脑&#xff0c;只需要在Windows 10/11 里安装 WSL 就能体验 Linux 系统。因此…

CTFhub-RCE-过滤目录分隔符 /

根据源代码信息可知&#xff0c;过滤掉了/ <?php $res FALSE; if (isset($_GET[ip]) && $_GET[ip]) { $ip $_GET[ip]; $m []; if (!preg_match_all("/\//", $ip, $m)) { $cmd "ping -c 4 {$ip}"; exec($cmd,…

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…

SpringMVC 进阶

SpringMVC 进阶 一、拦截器 SpringMVC 中 Interceptor 拦截器的主要作⽤是拦截⽤⼾的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证&#xff0c;或者是来判断⽤⼾是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两种&#xff1a; 实现接⼝&#xff1a;org.springfram…

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序&#xff1a; 冒泡排序(Bubble Sort)&#xff0c;又被称为气泡排序或泡沫排序。升序时&#xff1a;它会遍历若干次需要排序的数列&#xff0c;每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&#x…

黔院长 | 何为风邪?

中医上所说的风&#xff0c;也称风邪&#xff0c;是指受到外界侵犯&#xff08;外邪&#xff09;而感得风寒、风热、风湿等症状&#xff0c;导致人的免疫力下降。寒、湿、燥、暑、热等都属于外邪&#xff0c;多依附于风而入侵人体&#xff0c;因此风邪更多的是指一种致病因素。…