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

【数据结构与算法 经典例题】相交链表

                                                 

                                               💓 博客主页:倔强的石头的CSDN主页 

                                               📝Gitee主页:倔强的石头的gitee主页

                                        ⏩ 文章专栏:数据结构与算法刷题系列(C语言)

                                                                期待您的关注

目录

一、问题描述

二、解题思路

方法一:双循环对比法

方法二: 双指针法

三、C语言代码实现

方法一实现代码

方法二实现代码


一、问题描述

160. 相交链表 - 力扣(LeetCode)

如下图所示

二、解题思路

方法一:双循环对比法

  • 时间复杂度O(n^2)       空间复杂度O(1)
  • 链表A中的节点依次与链表B中的每个节点比较
  • 若出现节点相同,则相交且为第一个交点
  • 若链表A走到空依然没有相同的节点,则不相交

注意:暴力解法效率较低,不建议采用

方法二: 双指针法

  • 时间复杂度O(n)           空间复杂度O(1)
  • 首先遍历链表求出两个链表的长度,求得长度的差值
  • 定义两个快慢指针,哪个链表长,快指针就指向哪个链表
  • 两个指针分别从两个链表的第一个节点开始遍历,快指针先走出一个长度差值,之后两个指针每移动一步,比较指向的节点是否相同
  • 若出现节点相同,则相交且为第一个交点
  • 若两个指针走到空依然没有相同的节点,则不相交

三、C语言代码实现

方法一实现代码

 struct ListNode 
{int val;struct ListNode *next;
};typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{ListNode*pcurA=headA;ListNode*pcurB=headB;while(pcurA){pcurB=headB;while(pcurB){if(pcurA==pcurB)return pcurA;pcurB=pcurB->next;}pcurA=pcurA->next;}return NULL;
}

方法二实现代码

 struct ListNode 
{int val;struct ListNode *next;
};typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{ListNode*pcurA=headA;ListNode*pcurB=headB;int countA=0;int countB=0;while(pcurA)//求出链表长度{pcurA=pcurA->next;countA++;}while(pcurB){pcurB=pcurB->next;countB++;}int tmp=abs(countA-countB);//长度差值ListNode*slow,*fast;if(countA<countB){slow=headA;fast=headB;}else{slow=headB;fast=headA;}while(tmp--)//长链表先走差值的步数{fast=fast->next;}while(fast&&slow)//同步比较{if(fast==slow)return fast;fast=fast->next;slow=slow->next;}return NULL;
}

相关文章:

  • 【java程序设计期末复习】chapter7 内部类和异常类
  • C++STL---string知识汇总
  • Elasticsearch的复制功能
  • C#解析xml文件
  • K8s的kubectl的基本操作
  • C语言中的操作符
  • 二叉树——经典练习题
  • 【Linux-中断】
  • K8S认证|CKA题库+答案| 13. sidecar 代理容器日志
  • Qt中的网络编程(Tcp和Udp)详解 及 实现
  • Gitee的原理及应用详解(二)
  • vue data中的return
  • 使用pyqt绘制一个爱心!
  • C++ 实现深度优先搜索(DFS)的简单示例代码
  • 【OpenCV 基础知识 18】对两图像按位与操作
  • [deviceone开发]-do_Webview的基本示例
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CSS实用技巧
  • k8s如何管理Pod
  • Linux快速复制或删除大量小文件
  • PHP 7 修改了什么呢 -- 2
  • python 装饰器(一)
  • react 代码优化(一) ——事件处理
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue UI框架库开发介绍
  • Vue2 SSR 的优化之旅
  • vue-router的history模式发布配置
  • Vue全家桶实现一个Web App
  • 前端存储 - localStorage
  • 如何编写一个可升级的智能合约
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信小程序--------语音识别(前端自己也能玩)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 延迟脚本的方式
  • 因为阿里,他们成了“杭漂”
  • 在Mac OS X上安装 Ruby运行环境
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • k8s使用glusterfs实现动态持久化存储
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #APPINVENTOR学习记录
  • (1)(1.9) MSP (version 4.2)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二)JAVA使用POI操作excel
  • (二)PySpark3:SparkSQL编程
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (黑马C++)L06 重载与继承
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四)linux文件内容查看
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景