【数据结构和算法】链表的综合算法练习:1.返回倒数第k个节点 2.相交链表 3.回文链表

【数据结构和算法】链表的综合算法练习:1.返回倒数第k个节点 2.相交链表 3.回文链表
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

链表作为数据结构的基础核心,是算法面试与嵌入式开发中高频考察的重点。本文聚焦三道经典链表真题,通过快慢指针、链表反转等核心技巧,拆解倒数第 k 个节点、回文链表与相交链表的解题逻辑,结合代码实现与避坑指南,助力高效掌握链表解题思维。

一、返回倒数第k个节点

1.1题目

链接:返回倒数第k个节点

在这里插入图片描述

1.2 算法原理

核心思想: 类快慢指针,定义两个指针slow和fast让fast先走k步使得fast与slow始终相差k当fast走到NULL时slow便是指向链表的倒数第k个节点

1.3 代码

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;*};*/ typedef struct ListNode* ListNode; int kthToLast(struct ListNode* head, int k){ ListNode slow = head; ListNode fast = head;while(k--) fast = fast->next;while(fast){ fast = fast->next; slow = slow->next;}return slow->val;}

二、相交链表

2.1 题目

链接:相交链表

在这里插入图片描述
注: 这道题是以进阶的要求来做的

2.2 算法原理

核心思想: 寻找中间节点 + 反转链表
寻找中间节点然后反转中间节点以及中间节点后的链表节点,此时链表的尾节点成为新的中间节点,用头节点开始与中间节点开始比较,遍历两部分链表即可

如何寻找中间节点
核心思想:快慢指针(2*slow == fast)

注意:不能fast->next && fast当遇到偶数链表会造成对空指针解应用
如何反转链表?

2.3 代码

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;*};*/ typedef struct ListNode* ListNode;//寻找中间节点 ListNode seek_mid(ListNode head){ ListNode slow = head; ListNode fast = head;//慢指针走一步,快指针走两步 while(fast && fast->next){ slow = slow->next; fast = fast->next->next;}return slow;}//逆置 ListNode reserve_mid(ListNode head){ ListNode n1 =NULL; ListNode n2 = head; ListNode n3 = head->next;while(n2){ n2->next = n1; n1 = n2; n2 = n3;if(n3) n3 = n3->next;}return n1;} bool isPalindrome(struct ListNode* head){//寻找中间节点 ListNode mid =seek_mid(head);//逆置 ListNode rmid =reserve_mid(mid); ListNode cur = head;while(cur && rmid){if(cur->val != rmid -> val)returnfalse; cur = cur->next; rmid = rmid->next;}returntrue;}

三、回文链表

3.1 题目

链接:回文链表

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

3.2 算法原理

题目的核心问题: 链表是否相交? + 相交如何找到相交节点?
(1) 如何链表是否相交?— 链表相交尾节点必定相同
(2) 如何找到相交节点? — 在两个链表寻找尾节点时统计两个链表的长度,判断做差,让长的链表先走相差的步数,使得两个链表长度一致,然后遍历两个链表判断相交节点即可。

注: 在判断时不管是尾部节点还是相交节点都应该是判断地址而不是数值,因为节点存储的值可能一致从而导致判断错误。

3.3 代码

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;*};*/ typedef struct ListNode* ListNode; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB){ ListNode cur1 = headA; ListNode cur2 = headB; int lena =1,lenb =1;//判断尾节点是否相同 while(cur1->next){ lena++; cur1 = cur1->next;}while(cur2->next){ lenb++; cur2 = cur2->next;}if(cur1 != cur2)returnNULL; int gap =abs(lena - lenb); ListNode shortlist = headA; ListNode longlist = headB;if(lena >lenb){ shortlist = headB; longlist = headA;}//让长的先走追平链表长度 while(gap--) longlist = longlist->next;while(longlist != shortlist){ longlist = longlist->next; shortlist = shortlist->next;}return longlist;}

总结与每日励志

本文梳理了三类链表问题的最优解法,核心在于灵活运用指针策略简化操作,同时需注重空指针等边界条件的处理。每一次代码调试的突破,都是逻辑思维的进阶。2026 年,愿你在技术之路上步步为营,深耕不辍,用坚持敲开梦想的大门,永远相信美好的事情即将发生!

在这里插入图片描述

Read more

腾讯扔出“王炸”|微信变身AI超级入口:Qclaw免费内测,三步上手攻略

腾讯扔出“王炸”|微信变身AI超级入口:Qclaw免费内测,三步上手攻略

文章目录 * 使用教程 过去,大家总觉得AI工具有门槛——要配置环境、学习指令、切换应用,繁琐得像换一台新电脑。 但现在,Qclaw把这一切彻底打破。 从下载到使用,只需三步,全程不超过3分钟。 没有复杂的设置,没有技术门槛,真正做到了“傻瓜式操作,专业级体验”。 第一步:下载安装 前往 Qclaw 官网(https://claw.guanjia.qq.com/),根据你的系统(Mac / Windows)下载安装包,一键安装,无需任何开发环境配置,耗时不到2分钟。 第二步:扫码绑定 打开电脑端 Qclaw,用微信扫描界面上的二维码,30秒内即可完成绑定。 从此,你的微信就成了Qclaw的“远程遥控器”。 第三步:发送指令 在微信里直接对Qclaw说你想做的事——无论是处理文档、操作电脑,还是执行某个具体任务,

By Ne0inhk
AI 开发必用的4个skills组合,用来流畅掌控AI开发流程 ,灵活控制AI(opencode skills)

AI 开发必用的4个skills组合,用来流畅掌控AI开发流程 ,灵活控制AI(opencode skills)

skills 一种技能增强器。 skills 可以理解为升级版的提示词,它的文件记录了某个skill(技能)的元信息,就是描述这个skills的名称等信息, 另外它的文件中还记录了skills的技能实现步骤。 以下4个skills在AI项目开发中,我认为必不可缺一。 这4个skills的引入,可更为方便我们去介入AI,控制AI,给AI制定边界。 我会用一个音乐机器人项目开发来介绍这4个skills,如何介入AI开发流程,如何行云流水的控制AI。 指令式 控制AI 开发流程的主控调度器:有4个SIKLLS 在我的项目中.opencode目录中存在4个skills, 4个skills技能结合和.opencode目录同级的AGNETS.md文档,AGNETS.md是主控配置文件, 是AI 开发流程的主控调度器,负责协调三个专业技能包(毒蛇产品经理、UI设计师、全栈开发工程师、ui-ux-pro-max) ui-ux-pro-max技能包,我120%的推荐,减少了不少UI配色的塑料感,可在文末看我此次,用技能包开发的UI界面,做一个效果对比。 skills技能指令: 我

By Ne0inhk
clawdbot无痛升级openclaw,飞书变个人AI助理保姆级教程

clawdbot无痛升级openclaw,飞书变个人AI助理保姆级教程

大家好, 我是阿星👋! 上期我们已经教大家如何用本机+clawdbot在飞书上部署个人助理。clawdbot接入飞书阿里云,立即拥有24小时AI助理贾维斯 但是clawdbot又改名为OpenClaw了旧的已经不维护了。 新版还加了webui功能可以可视化进行配置。所以我们肯定是要升级的。 而且新版还可以比较方便安装一下下面功能,还能做功能拓展: 在新版,你可以优先勾选以下几个最实用的技能 所以,如果你想实现下面这些功能,可以跟着下面步骤升级到2026.2.9 * 📝 apple-notes / ⏰ apple-reminders : 这样你可以直接在飞书里跟机器人说“帮我记个笔记”或者“下午三点提醒我开会”。 * 🐙 github : 勾选这个可以让你通过机器人查询仓库动态或管理 Issue。 * 📸 camsnap : 很酷的功能,可以让机器人调用你 MacBook 的摄像头拍照并传给你(适合远程监控)。 * 📨 imsg : 允许机器人帮你收发 iMessage 短信。 * 🧩 clawhub : 核心组件,建议保留。 第一步:清理旧门户

By Ne0inhk
人工智能:计算机视觉高级应用与前沿发展

人工智能:计算机视觉高级应用与前沿发展

计算机视觉高级应用与前沿发展 学习目标 💡 理解计算机视觉的前沿技术和发展趋势 💡 掌握高级计算机视觉应用(如人脸识别、图像分割、图像生成) 💡 学会使用前沿计算机视觉模型(如ViT、Swin Transformer、CLIP) 💡 理解计算机视觉在多模态融合、零样本学习、少样本学习中的应用 💡 通过实战项目,开发一个高级人脸识别应用 重点内容 * 计算机视觉前沿技术和发展趋势 * 高级计算机视觉应用(人脸识别、图像分割、图像生成) * 前沿计算机视觉模型(ViT、Swin Transformer、CLIP) * 多模态融合、零样本学习、少样本学习 * 实战项目:高级人脸识别应用开发 一、计算机视觉前沿技术和发展趋势 1.1 多模态融合 1.1.1 多模态融合的基本概念 多模态融合是将不同模态的数据(如文本、图像、音频)结合起来,进行处理和分析的过程。它可以提高模型的性能和准确性。 1.

By Ne0inhk