链表练习题

返回倒数第K个节点

快慢指针

让快指针先走k步,再使得快指针与慢指针同时走一步,这样没有开额外空间,空间复杂度较低。

代码实现如下:

struct ListNode {int val;struct ListNode* next;};
int kthToLast(struct ListNode* head, int k) 
{struct ListNode* fast = head;struct ListNode* slow = head;while (k--){fast = fast->next;}while (fast){fast = fast->next;slow = slow->next;}return slow->val;
}

这里给的k不会大于链表长度。

链表的回文结构

这里要求空间复杂度为O(1),所以不能创建新数组,在这里我们首先访问中间节点,需要访问中间节点函数:

struct ListNode* middleNode(struct ListNode* head){struct ListNode* fast = head;struct ListNode* slow = head;while(fast && fast->next)//不能交换位置,fast为空,即证明为偶数节点,fast->next为空,即证明为奇数节点{slow = slow->next;fast = fast->next->next;}//此时slow就是指向中间节点的指针return slow;    }  

还需要反转链表函数:

struct ListNode* reverseList(struct ListNode* head) {//判空if(head == NULL)return head;struct ListNode* n1 = NULL;struct ListNode* n2 = head;struct ListNode* n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;}

假设现有一偶数链表

找到中间节点后将其反转,再对比头节点A与反转后的中间节点rmid,如果相等则继续往后走,如果不相等则直接返回false。

假设为奇数链表

对于奇数链表来说,其实存在一种特殊的偶然性:

即当2指向下一个节点时,我们发现指向的是3,因为我们反转了后面的链表,但并没有影响前面链表与后面链表的连接,所以这里将A与rmid进行比较时相当于自己与自己比较,仍会返回true.

综上,代码如下:

truct ListNode* middleNode(struct ListNode* head){struct ListNode* fast = head;struct ListNode* slow = head;while(fast && fast->next)//不能交换位置,fast为空,即证明为偶数节点,fast->next为空,即证明为奇数节点{slow = slow->next;fast = fast->next->next;}//此时slow就是指向中间节点的指针return slow;    }  struct ListNode* reverseList(struct ListNode* head) {//判空if(head == NULL)return head;struct ListNode* n1 = NULL;struct ListNode* n2 = head;struct ListNode* n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;}
bool chkPalindrome(ListNode* A) 
{// write code herestruct ListNode* mid = middleNode(A);struct ListNode* rmid = reverseList(mid);while(A && rmid){if(rmid->val != A->val)return false;A = A->next;rmid = rmid->next;}return true;
}
};

链表的相交

对于链表的相交,我们可以先让长的链表先走几步,再让长短链表同时移动,当两链表的值相同时就是交叉点,而其中先走的步数是长链表的长度减去短链表长度的值。

代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *curA = headA, *curB = headB;int lenA = 1, lenB = 1;//因为cur到尾节点就不会向后移动了,所以如果设置的len初始值为0,会导致最终结果比链表实际长度少一个,所以这里我们将其初始化为1.while(curA){curA = curA->next;lenA++;}while(curB){curB = curB->next;lenB++;}if(curA != curB)//若到尾节点还不相等那么就没有相交节点return NULL;struct ListNode *LongList = headA,*ShortList = headB;if(lenA < lenB){LongList = headB;ShortList = headA;}int gap = abs(lenA - lenB);while(gap--){LongList = LongList->next;}while(LongList != ShortList){ShortList = ShortList->next;LongList = LongList->next;}return ShortList;
}

总结

做题时要多画图,通过画图将题目弄清楚可以起到事半功倍的效果。

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

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

相关文章

第 52 期:MySQL 半同步复制频繁报错

社区王牌专栏《一问一实验&#xff1a;AI 版》全新改版归来&#xff0c;得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询&#xff0c;表达了想试用体验 ChatDBA 的意愿&#xff0c;对此我们表示感谢 &#x1f91f;。 目前&#xff0c;ChatDBA 还在最后的准备…

el-table实现合并特定列的所有行

el-table实现合并特定列的所有行 示例&#xff1a; 在这里插入图片描述 const objectSpanMethod ({ row, column, rowIndex, columnIndex }) > {if (columnIndex 5 || columnIndex 7) {// 就是只保留第一行&#xff0c;其他直接不要&#xff0c;然后行数是列表长度if …

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

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 下列哪个命令,可以将2024转换成’2024’ 呢?( ) A:str(2024) B:int(2024) C:float(2024) D:bool(2024) 答案:A 本题考察的是str() 语句,将数字转换成字符串用到的是str() 语句。 …

Java:IO

首 java.io中有百万计的类&#xff0c;如何找到自己需要的部分&#xff1f; 流 IO涉及到一个“流”stream的概念&#xff0c;可以简单理解成数据从一个源头到一个目的地。明白数据从哪来&#xff0c;要到哪里去&#xff0c;数据流中是字节还是字符之后&#xff0c;才能找到自…

回顾下Java中的基本数据类型以及Integer与int的区别

一、Java中的基本数据类型&#xff08;Primitive Data Types&#xff09;共有八种&#xff0c;它们分别是&#xff1a; byte&#xff1a;字节型&#xff0c;用于表示8位整数&#xff0c;取值范围从-128到127&#xff08;包括-128和127&#xff09;。 short&#xff1a;短整型&…

由于找不到d3dx9_39.dll,无法继续执行代码的5种解决方法

在现代科技发展的时代&#xff0c;电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;由于各种原因&#xff0c;我们可能会遇到一些电脑问题&#xff0c;其中之一就是“d3dx9_39.dll丢失”。这个问题可能会导致我们在运行某些游戏或应用程序时遇到错误提示&#xff0c;…

AI 生成第9篇测试文章:测试人员如何发挥自己在团队中的作用?

背景 在快速迭代的软件开发环境中&#xff0c;测试人员的角色早已超越了传统的“找bug”范畴&#xff0c;TA们成为了保证产品质量、促进团队协作、推动技术创新的重要力量。本文将深入探讨测试人员如何在团队中发挥更加全面和深入的作用&#xff0c;成为不可或缺的一环。 1. …

Vue中引入组件需要哪三步

在Vue中引入组件通常需要以下三步&#xff1a; 导入组件&#xff1a;首先&#xff0c;你需要在父组件中导入你想要使用的子组件。这通常是通过ES6的import语法完成的。 注册组件&#xff1a;接下来&#xff0c;你需要在父组件中注册这个子组件。这可以通过components选项完成&…

JavaScript如何让一个按钮的点击事件在完成之前禁用

在JavaScript中&#xff0c;要禁用一个按钮的点击事件直到某个操作完成&#xff0c;你可以将其点击事件用匿名函数的方式书写。 你可以将其在点击函数内设置为null来禁用按钮。 <button id"butto_n">点击抽奖</button><script>butto_n.onclick bu…

大整数运算详解升级版

目录 大整数的存储 大整数的四则运算 高精度加法 高精度减法 高精度与低精度的乘法 高精度与低精度的除法 大整数的存储 对于大整数使用数组存储&#xff0c;例如定义int型数组d[1000]&#xff0c;那么这个数组中的每一位就代表了存放的整数的每一位。如将整数235813存…

android requireActivity() 和 getActivity()使用问题

requireActivity() 和 getActivity() 都是从 Fragment 中获取宿主 Activity 的方法,但它们有一些不同的行为和使用场景。 requireActivity() 抛出异常:如果 Fragment 没有附加到任何 Activity,调用 requireActivity() 会抛出 IllegalStateException。安全性:通常在你确定 …

新品 | Forge® 1GigE IP67工业相机助力智能农业、食品和饮料行业

近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出Forge 1GigE IP67,它是Forge系列的最新工业相机&#xff0c;旨在在恶劣的工业环境中运行&#xff0c;同时确保高效的生产能力。Forge 1GigE IP67致力于为工厂自动化提供先进成像系统的最新产品。 Forge 1GigE IP67相机…

python-pytorch 实现seq2seq+luong general concat attention 完整代码

接上一篇https://blog.csdn.net/m0_60688978/article/details/139046644 # def getAQ(): # ask[] # answer[] # with open("./data/flink.txt","r",encoding"utf-8") as f: # linesf.readlines() # for line in lin…

MyBatis多数据源配置与使用,基于ThreadLocal+AOP

导读 MyBatis多数据源配置与使用其一其二1. 引依赖2. 配置文件3. 编写测试代码4. 自定义DynamicDataSource类5. DataSourceConfig配置类6. AOP与ThreadLocal结合7. 引入AOP依赖8. DataSourceContextHolder9. 自定义注解UseDB10. 创建切面类UseDBAspect11. 修改DynamicDataSourc…

jQuery里添加事件 (代码)

直接上代码 <!DOCTYPE html> <html><head></head><body><input type"text" placeholder"城市" id"city" /><input type"button" value"添加" id"btnAdd" /><ul id…

PTA 计算矩阵两个对角线之和

计算一个nn矩阵两个对角线之和。 输入格式: 第一行输入一个整数n(0<n≤10)&#xff0c;第二行至第n1行&#xff0c;每行输入n个整数&#xff0c;每行第一个数前没有空格&#xff0c;每行的每个数之间各有一个空格。 输出格式: 两条对角线元素和&#xff0c;输出格式见样例…

Android存储系统成长记

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文概要 您一定使用过Context的getFileStreamPath方法或者Environment的getExternalStoragePublicDirectory方法&#xff0c;甚至还有别的方法把数据存储到文件中&#xff0c;这些都是存储系统提供的服务&#x…

PTA 判断两个矩阵相等

Peter得到两个n行m列矩阵&#xff0c;她想知道两个矩阵是否相等&#xff0c;请你用“Yes”&#xff0c;“No”回答她&#xff08;两个矩阵相等指的是两个矩阵对应元素都相等&#xff09;。 输入格式: 第一行输入整数n和m&#xff0c;表示两个矩阵的行与列&#xff0c;用空格隔…

修改元组元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟&#xff1a;伊米咖啡馆&#xff0c;由于麝香猫咖啡需求量较大&#xff0c;库存不足&#xff0c;店长想把它换成拿铁咖啡。 实例08 将麝香猫…

chrome浏览器驱动下载

跑自动化的时候&#xff0c;需要打开谷歌浏览器&#xff0c;这个时候提示浏览器驱动找不到咋办呢&#xff1f; 1、网上搜索找到了这篇文章&#xff1a;https://www.cnblogs.com/laoluoits/p/17710501.html&#xff1b;按照文章介绍&#xff0c; 首先找到&#xff1a;CNPM Bin…