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

链表-链表相交

文章目录

    • 02.07. 链表相交

02.07. 链表相交

题目链接:

02.07. 链表相交

题目描述:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/da316aae8bf04c7f985c6331c6f3ce1f.png)

在这里插入图片描述

题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:

简单来说,就是求两个链表交点节点的指针。 这里同学们要注意,交点不是数值相等,而是指针相等。

为了方便举例,假设节点元素数值相等,则节点指针相等。

看如下两个链表,目前curA指向链表A的头结点,curB指向链表B的头结点:

在这里插入图片描述
我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,如图:

在这里插入图片描述
此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。

否则循环退出返回空指针。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode cur1 = headA;//指向headA的指针ListNode cur2 = headB;//指向headB的指针int len1 = 0;//链表A的长度int len2 = 0;//链表B的长度while(cur1!=null){cur1 = cur1.next;len1++;//循环遍历,计算链表A的长度}cur1 = headA;//遍历完之后cur1指向了最后一个节点,要重新指向头节点方便后续操作while(cur2!=null){cur2 = cur2.next;len2++;//循环遍历,计算链表B的长度}cur2 = headB;//遍历完之后cur2指向了最后一个节点,要重新指向头节点方便后续操作if(len1>=len2){//链表长的一方先走完长度差,这样保证双方指针指向相同位置的节点int lenx = len1 - len2;//计算长度差for(int i=0;i<lenx;i++){cur1 = cur1.next;}//两个指针同时移动,找相等的时候while(cur1!=null){if(cur1==cur2){return cur1;}else {cur1 = cur1.next;cur2 = cur2.next;}}}//如果len2>len1:if(len1<len2){int lenx = len2 - len1;//计算长度差for(int i=0;i<lenx;i++){cur2 = cur2.next;}//两个指针同时移动,找相等的时候while(cur1!=null){if(cur1==cur2){return cur1;}else {cur1 = cur1.next;cur2 = cur2.next;}}}return null;//没有相等的,就是没有地址一样的,没有相交,所以返回null。}
}

注:本文章参考代码随想录,下面是原文出处:链表相交

相关文章:

  • (泛函分析)巴拿赫空间Banach Space和希尔伯特空间Hilbert Space
  • 向量数据库Milvus01-入门与核心原理详解
  • 【samba和nfs的搭建】
  • Arduino和STM32的区别详解
  • 5.1/Q1,GBD数据库最新文章解读
  • AI扫描王APP:高效便捷的手机扫描工具,让生活更智能
  • day35 python模型可视化与推理
  • 使用防火墙禁止程序联网(这里禁止vscode)
  • 天猫平台实时商品数据 API 接入方案与开发实践
  • C++——volatile
  • Python打卡第35天
  • Ollama01-安装教程
  • C#学习第25天:GUI编程
  • 关于支付组织
  • 黑马k8s(十五)
  • Mac的显卡架构种类
  • 数据透视表和公式法在Excel中实现去除重复计数的方法
  • 攻防世界RE-666
  • exti line2 interrupt 如何写中断回调
  • 关于使用QT时写客户端连接时因使用代理出现的问题
  • python怎么做抢课网站/网络营销计划的七个步骤
  • 域名注册的网站有哪些/百度手机关键词排名工具
  • 如何在360网站网页上做笔记/私域运营软件
  • 云南住房和城乡建设厅网站/关键词排名批量查询软件
  • 如何用ps做网站页面设计/seo数据监控平台
  • 网络推广网站/百度400电话