当前位置: 首页 > news >正文

链表经典题目—相交链表和链表倒数第k个节点

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C++和数据结构怀有无限热忱的探索者。🙌

🌸🌸🌸这里是我分享C/C++编程、数据结构应用的乐园✨

🎈🎈🎈期待与你一同在编程的海洋中遨游,探索未知的技术奥秘💞

📝专栏指路:

📘【C++】专栏:深入解析C++的奥秘,分享编程技巧与实践。

📘【数据结构】专栏:探索数据结构的魅力,助你提升编程能力。

本文主要介绍链表经典题目:相交链表和链表倒数第k个节点

相交链表

点击下方即可做题:

相交链表

题目

3806b0fbdf1740c8ae18eae1aa64ade2.png

画图分析

2b6eff1ed5e146a98f4007835f94f6c4.png

代码

/*** 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*pcurA,*pcurB;pcurA=headA;pcurB=headB;//链表长度int lenA=1;int lenB=1;while(pcurA->next){pcurA=pcurA->next;lenA++;}while(pcurB->next){pcurB=pcurB->next;lenB++;}//不相交,尾结点地址不同,不能用值来判断if(pcurA!=pcurB){return NULL;}//相交,找两个链表长度差,让长链表先走gap步,//两个链表在同时走,第一个相同的节点即为起始交点int gap=abs(lenA-lenB);//先假设ListNode*longList=headA;ListNode*shortList=headB;//假设不出来,再换if(lenA<lenB){longList=headB;shortList=headA;}//--gap走gap-1步while(gap--)//让长链表先走gap步{longList=longList->next;}while(longList!=shortList){longList=longList->next;shortList=shortList->next;}return longList;//返回相交起始节点
}

链表中倒数第k个节点

daed48edc18045cab997e2271ecc1eff.png

代码实现

#include<stdio.h>
typedef struct ListNode ListNode;
typedef int LTDataType;
struct ListNode
{ListNode* next;LTDataType data;
};
ListNode* LTBuyNode(LTDataType x)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));newnode->next = NULL;newnode->data = x;return newnode;
}
ListNode* RLTPos(ListNode* head, int k)//返回链表倒数第k个节点
{ListNode* fast, * slow;fast = slow = head;//先让fast走k步while (k--){//k还没有减到0,链表已经为空了,说明k大于链表长度if (fast == NULL){return NULL;}fast = fast->next;}//再一起走,fast走到空,slow就是倒数第k个while (fast){slow = slow->next;fast = fast->next;}return slow;
}
int main()
{ListNode* listA1 = LTBuyNode(1);ListNode* listA2 = LTBuyNode(2);ListNode* listA3 = LTBuyNode(3);listA1->next = listA2;listA2->next = listA3;listA3->next = NULL;ListNode* k = RLTPos(listA1, 2);printf("%d", k->data);return 0;
}

 

 

 

 

 

相关文章:

  • 基于香橙派 Ai Pro的ROS Qt人机交互软件部署指南
  • 漫步者x1穷鬼耳机双耳断连
  • idea配置ssh、sftp连接服务器,docker插件使用,极其方便,无需再开第三方软件去操作服务器了,集成用于Idea一体
  • 【Java继承】(超级详细!!!)
  • 【pm2 - sdk 集成到程序中,典型用法】
  • 堆结构知识点复习——玩转堆结构
  • 当HR问你是否单身时,该怎么回答?
  • 高德地图之获取经纬度并且根据获取经纬度渲染到路线规划
  • Upstream最新发布2024年汽车网络安全报告-百度网盘下载
  • Unity 生成物体的几种方式
  • C数据结构:二叉树
  • 信号量和事件及队列补充
  • Linux-Web服务搭建面试题-1
  • esp32 idf开发中的常用命令
  • 网络故障排除-OSPF故障
  • 《深入 React 技术栈》
  • js正则,这点儿就够用了
  • Python语法速览与机器学习开发环境搭建
  • React-生命周期杂记
  • Spring声明式事务管理之一:五大属性分析
  • swift基础之_对象 实例方法 对象方法。
  • uva 10370 Above Average
  • 阿里云Kubernetes容器服务上体验Knative
  • 服务器从安装到部署全过程(二)
  • 机器学习学习笔记一
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端技术周刊 2019-02-11 Serverless
  • 使用common-codec进行md5加密
  • 使用SAX解析XML
  • 微信小程序:实现悬浮返回和分享按钮
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 学习笔记TF060:图像语音结合,看图说话
  • 用简单代码看卷积组块发展
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C#)获取字符编码的类
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net中wcf服务生成及调用
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20171101]rman to destination.txt
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [android] 请求码和结果码的作用
  • [C++] 统计程序耗时
  • [CTF]php is_numeric绕过
  • [C语言]——C语言常见概念(1)