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

C语言/数据结构——(相交链表)

一.前言

今天在力扣上刷到了一道题,想着和大家一起分享一下这道题——相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists废话不多说,让我们开始今天的分享吧。

二.正文

1.1题目描述

是不是感觉好长,我也这么觉得。哈哈,不过没办法,大家们凑合看一下吧,毕竟人家的题就那么长。

1.2题目分析

我想到有两种方法,一种是暴力求解,时间复杂度是O(N^2),还有一种是一种稍微巧妙一点的技巧,时间复杂度是(N)。

两种方法共同部分:

我们可以创建两个指针分别是指向headA和headB的 ,pcur1和pcur2。并让pcur1=headA

pcur2=pcurB。

我们首先需要判断该链表是不是相交链表,如果是,则返回相交链表的第一个相交节点。否则,返回NULL。那么如何判断该链表是不是相交链表呢?其实我们可以让pcur1和pcur2分别遍历两个链表的最后一个节点即可,如果pcur1=pcur2则说明两个链表至少有一个相交节点,毫无疑问这肯定是相交节点。反之,pcur1!=pcur2,则说明,不是相交链表。(值得注意的是,完成上面部分后,记得让pcur1=headA,pcur2=headB,因为pcur1和pcur2后续我们还需要重新遍历两个链表)

(i)暴力算法:

我们可以让headA中的每一个节点都与headB中的节点遍历一次,然后让headA的下一个节点,重复这个动作,直到headA的最后一个节点遍历结束。

这是该方法的代码:

/*** 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* pcur1,*pcur2;
pcur1=headA;
pcur2=headB;
while(pcur1->next!=NULL)
{pcur1=pcur1->next;
}
while(pcur2->next!=NULL)
{pcur2=pcur2->next;
}
if(pcur2!=pcur1)
return NULL;
pcur1=headA;
pcur2=headB;
while(pcur1->next!=NULL)
{
while(pcur2->next!=NULL)
{
if(pcur1==pcur2)
return pcur1;
pcur2=pcur2->next;
}
pcur2=headB;
pcur1=pcur1->next;
}
return pcur1;
}

(ii)非暴力算法:

那么我们应该依据什么来遍历相对长度前的数据呢?我们可以利用在遍历A和B的同时,让代表A链表len1++来算出长度,同理len2是算出B的长度。定义一个变量gap=abs(len1-len2)算出绝对值,如果A链表长,则A链表先遍历gap个长度的节点,反之B链表长则,B链表先遍历gap个长度的节点。

最后的步骤是上图所示,相对长度中的上下节点依次比较。

三.结言

今天的题目分享就到此结束了,拜拜了,家人们。

http://www.lryc.cn/news/345862.html

相关文章:

  • 【二叉树算法题记录】二叉树的所有路径,路径总和——回溯
  • verilog基础语法之数据类型
  • ansible部署lamp架构
  • Java面试——MyBatis
  • Ubuntu-22.04使用systemd.mount挂载本地磁盘
  • 【Qt】界面定制艺术:光标(cursor)、字体(font)、提示(toolTip)、焦点(focusPolicy)与样式表(styleSheet)的深度探索
  • Python GraphQL服务器实现库之tartiflette使用详解
  • 面试官:请介绍类加载过程,什么是双亲委派模型?
  • mysql 细分
  • 数据驱动实战二
  • 解决参考文献自动生成标号,换行时自动缩进
  • 网络安全专业岗位详解+自学学习路线图
  • mybatisPlus一个事务中切换数据源概述
  • 如何在Android手机上恢复已删除的视频?
  • 【项目实战】使用Github pages、Hexo如何10分钟内快速生成个人博客网站
  • 大数据中服役新数据节点和退役旧节点步骤(hive,hadoop)
  • 数论:不定方程的引入
  • 数据中心法
  • pdffactory pro8.0虚拟打印机(附注册码)
  • 处理用户输入
  • 在装有centOS7的虚拟机上进行MySQL的安装部署
  • 【vivado】debug相关时钟及其约束关系
  • 什么是HTTP/2?
  • 【ChatGPT with Date】使用 ChatGPT 时显示消息时间的插件
  • STM:TIM定时器——定时中断
  • jetson tx2 nx实现在ros1中yolov5实现
  • 【SpringBoot笔记43】SpringBoot应用程序集成spring-boot-admin监控工具
  • 与队列和栈相关的【OJ题】
  • Unity编辑器扩展
  • 【kettle】kettle访问数据库系列文章及视频地址(更新中)