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

                                                 

                                               💓 博客主页:倔强的石头的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;
}

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

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

相关文章

5.26作业

服务器 2 3 #define BUFSIZE 10244 #define login_msg_len 205 6 typedef struct Node{7 char name[login_msg_len];8 struct sockaddr_in addr;9 struct Node *next;10 }Node;11 12 typedef struct Msgtype{13 char type;14 char username[login_msg_len]…

LangChain llamaindex

LangChain 参考&#xff1a; 全流程 | Windows 系统本地部署开源模型阿里通义千问 QWEN 1.5&#xff0c;结合 LangChain-Chatchat 框架和向量数据库 FAISS、Milvus - 知乎

redis数据操作相关命令

1.list操作 1.1 rpush rpush&#xff1a;新的元素添加到list最右边 #从右边依次往List添加1,2,3 RPUSH name 1 RPUSH name 2 RPUSH name 3#查看列表&#xff1a;返回 1,2,3 LRANGE name 0 -1结果如下&#xff1a; 1.2 lpush lpush&#xff1a;新加的元素在list最左边 #从…

ElasticSearch学习篇12_《检索技术核心20讲》基础篇

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243 课程分为基础篇、进阶篇、系统案例篇 主要记录企业课程学习过程课程大纲关键点&#xff0c;以文档形式记录笔记。 内容 检索技术&#xff1a;它是更底层的通用技术&#xff0c…

202009青少年软件编程(Python)等级考试试卷(四级)

第1题:【 单选题】 关于计算圆面积的匿名函数的定义,以下哪一个语法格式是正确的?( ) A:lambda r:3.1415926rr B:result=lambda r:3.1415926rr C:lambda r,3.1415926rr D:result=lambda r,3.1415926rr 【正确答案】: B 【试题解析】 : 关键字lambda表示匿名函数,冒…

GVM: Golang多版本管理利器

本文介绍了 Go Version Manager 的功能和使用方法&#xff0c;介绍了如何通过 GVM 在系统上安装和管理多个 Go 语言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions Go 版本管理器&#xff08;GVM&#xff0c;Go Version Manager&#xff09;是一款…

速盾:为啥要进行DDoS 压力测试?

DDoS&#xff08;分布式拒绝服务&#xff09;压力测试是一种网络安全测试方法&#xff0c;用于评估一个网络系统的抗DDoS攻击能力。在DDoS攻击中&#xff0c;攻击者会通过多台计算机发起大量的请求&#xff0c;使目标服务器过载&#xff0c;导致正常用户无法访问网站或服务。通…

webdriver.Chrome() 和 webdriver.Chrome(options=options)的区别

文章目录 1.前言2.区别分析 1.前言 在使用selenium的时候接触到了webdriver.chrome(optionsoptions)不是很明白之间的区别&#xff0c;所以就了解一下。 2.区别分析 webdriver.Chrome() 和 webdriver.Chrome(optionsoptions) 是在使用 Selenium 库控制 Chrome 浏览器时的两种…

探索未来直播新纪元:Voodoo Spatial 的3D 直播革命

在这个数字化时代,随着技术的不断进步,我们正见证着娱乐与社交方式的深刻变革。今天,让我们深入了解一款颠覆传统直播模式的创新应用——Voodoo Spatial,它是如何利用尖端技术,特别是针对苹果的Vision Pro设备和最新的iPhone 15 Pro系列,重新定义了直播的边界,带领我们迈…

Django框架css文件能正常加载,但是css样式不生效

最近运行一个Django项目&#xff0c;能正常启动运行&#xff0c;css文件也能够正常加载&#xff0c;但是css样式却没有正常渲染。 解决办法&#xff1a; 1、打开注册表&#xff1a;winR 2、找到&#xff1a;计算机\HKEY_CLASSES_ROOT\.css 修改&#xff1a;Content Type 值&…

Vue 之 vue-router 路由嵌套不显示问题

​ 本来想用嵌套路由弄个管理员平台的&#xff0c;结果一直不显示。 需求&#xff1a; 访问 /admin 显示Welcme.vue组件 访问/admin/product显示Product.vue组件 import { createRouter, createWebHistory } from "vue-router";import Home from "/views/Lay…

llamaindex rag agent 检索文档进行分析

两个 pdf 分别是两个电商公司的财报之类的&#xff0c;像分析这两家公司的盈利情况&#xff0c;利用 llamaindex 的 rag 检索盈利的部分&#xff0c;来对比 使用 tongyi&#xff0c;如果指定&#xff0c;默认是 openai 了 # 加载电商财报数据 from llama_index.core import S…

C++ | Leetcode C++题解之第113题路径总和II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> ret;unordered_map<TreeNode*, TreeNode*> parent;void getPath(TreeNode* node) {vector<int> tmp;while (node ! nullptr) {tmp.emplace_back(node->val);node …

mysql中单表查询方法

大家好。我们知道&#xff0c;mysql有一个查询优化器的模块。当我们用sql语句查询表中记录时&#xff0c;会对这条查询语句进行语法解析&#xff0c;然后就会交给查询优化器来进行优化&#xff0c;优化后生成一个执行计划&#xff0c;这个执行计划表明了应该使用哪些索引进行查…

Android 10.0 锁屏页面弹窗功能实现

1.前言 在10.0的系统rom产品定制化开发中,在定制化开发中,需要在锁屏页面弹窗功能,当收到某些信息的时候,需要添加 悬浮窗锁屏页面也同样需要弹窗功能,接下来就分析下相关功能,然后实现功能 2.锁屏页面弹窗功能实现的核心类 frameworks\base\core\java\android\view\Wi…

用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)

为了测试 Adam、RMSProp 和 Adagrad 算法的性能&#xff0c;你可以使用四个凸函数进行实验。以下是一些常用的凸函数示例&#xff1a; Rosenbrock 函数&#xff1a; Booth 函数&#xff1a; Himmelblau 函数&#xff1a; Beale 函数&#xff1a; 你可以选择其中一个或多…

生命在于学习——Python人工智能原理(1.2)

一、人工智能的基本知识 6、新一代人工智能驱动因素 &#xff08;1&#xff09;数据量爆发性增长。 &#xff08;2&#xff09;计算能力大幅提升 &#xff08;3&#xff09;深度学习等算法发展 &#xff08;4&#xff09;移动AI创新应用牵引 7、人工智能关键技术 &#x…

C语言经典例题-4

1.五子棋 test.c - 测试游戏的逻辑 game.c - 与游戏相关函数实现 game.h - 与游戏相关函数的声明&#xff0c;符号声明&#xff0c;头文件的包含。 //test.c #define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu() //打印菜单函数 {printf("********…

python 异常处理 try

异常 我们常见的代码错误后 会出现此类异常 SyntaxError&#xff1a;语法错误 AttributeError&#xff1a;属性错误 IndexError&#xff1a;索引错误 TypeError&#xff1a;类型错误 NameError&#xff1a;变量名不存在错误 KeyError&#xff1a;映射中不存在的关键字&#xf…

eletron入门教程 -- 快速写一个electron demo程序

1、前言 由于工作需要&#xff0c;前段时间基于electron框架开发了一个桌面应用程序。由于我之前主要是做c后端开发&#xff0c;所以没有任何electron基础&#xff0c;也没有任何前端开发基础&#xff0c;但是没有办法&#xff0c;老板需要&#xff0c;那就得会&#xff0c;不会…