【数据结构和算法】链表的综合算法练习: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

【大数据存储与管理】分布式文件系统HDFS:06 HDFS的数据读写过程

【大数据存储与管理】分布式文件系统HDFS:06 HDFS的数据读写过程

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。 文章目录 * 一、读数据的过程 * 二、写数据的过程 * 小结 在介绍 HDFS 的数据读写过程之前,需要简单介绍一下相关的类。FileSystem 是一个通用文件系统的抽象基类,可以被分布式文件系统继承,所有可能使用

By Ne0inhk
【大数据存储与管理】分布式文件系统HDFS:07 HDFS编程实践

【大数据存储与管理】分布式文件系统HDFS:07 HDFS编程实践

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。 文章目录 * 一、HDFS常用命令 * 二、HDFS的Web页面 * 三、HDFS常用Java API及应用实例 * (一)常用Java API介绍 * (二)应用实例 * 总结

By Ne0inhk
Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构

Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构 前言 在鸿蒙(OpenHarmony)生态迈向全球化部署、涉及多语言本地化(L10n)及深层文化特性适配的背景下,如何实现准确的阴阳历(农历)转换、二十四节气计算及民俗节日提醒,已成为提升应用“人文温度”与本地化竞争力的核心要素。在鸿蒙设备这类强调分布式时间同步与低功耗常驻显示(AOD)的环境下,如果应用依然依赖简单的查表法或通过网络接口获取农历信息,由于由于闰月计算的复杂性或离线环境限制,极易由于由于计算偏移导致传统节日提醒的误报。 我们需要一种能够实现天文级算法推演、支持高精度节气定位且具备纯 Dart 离线运作能力的历法治理方案。 vnlunar 为 Flutter 开发者引入了标准化的阴阳历转换协议。它不仅支持对天干地支、生肖及闰月的精确解构,更针对东南亚等地区的历法细微差异提供了专项适配。在适配到鸿蒙 HarmonyOS 流程

By Ne0inhk
告别传统解析!2026用ChatGPT+Python打造智能自适应爬虫

告别传统解析!2026用ChatGPT+Python打造智能自适应爬虫

传统爬虫的“命门”在于“硬编码依赖”——XPath/CSS选择器绑定固定网页结构,一旦页面迭代、布局微调,爬虫瞬间失效;面对千差万别的非结构化网页,更是需要编写数百行适配规则,维护成本远超开发本身。 2026年,智能自适应爬虫已成为行业主流:基于ChatGPT的语义理解与结构分析能力,爬虫不再依赖固定解析规则,而是能“看懂”网页内容、“识别”数据规律,自动适配不同结构的网页,甚至在页面变化后自我修复解析逻辑。本文将带你从0到1打造一套“智能自适应爬虫”,彻底告别传统解析的低效与脆弱。 一、智能自适应爬虫:到底“智能”在哪? 1. 传统爬虫 vs 智能自适应爬虫 维度传统爬虫智能自适应爬虫(ChatGPT+Python)解析逻辑依赖硬编码XPath/正则基于自然语言语义,无固定解析规则适配能力仅适配单一结构,变化即失效自动适配不同结构,页面迭代无需改代码非结构化处理几乎无法应对精准提取杂乱文本中的核心数据维护成本高(需持续更新规则)极低(仅需维护提取

By Ne0inhk