160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。

如下面的两个链表:

在节点 c1 开始相交。

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。

解题思路:
1.由结果找规律,即两个链表相交时,会有长度差,但是如果我们想象如果两个链表的长度是一样的,那么我们遍历链表的时候,就能够在遍历的过程中得到一样的节点(地址值)。
2.先把两个链表的长度先做到一样长。
①先求出两链表的长度m,n
②把长链表的头指针移动(m-n)的绝对值个节点。
3.做遍历并判断两个链表的节点是否相等,如果遍历完还没有一样的节点,那么则说明没有交点,则返回null。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
//求链表长度的函数
int get_ListLength(ListNode *head)
{int len=0;while(head){len++;head=head->next;}return len;
}
//移动链表的头指针
ListNode*  ListMoving(ListNode *head,int len)
{while(head&&len){head=head->next;len--;}return  head;
}class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {int len=get_ListLength(headA)-get_ListLength(headB);//求两链表的长度差if(len>0)//若长度差大于0,则移动headA,否则移动headB {headA=ListMoving(headA,len);}else{headB=ListMoving(headB,get_ListLength(headB)-get_ListLength(headA));}//遍历两个链表while(headB&&headA){if(headA==headB)//判断节点是否相交{return headA;}headA=headA->next;headB=headB->next;}return NULL;//遍历完说明没有相交的节点,返回null}
};

总结:这道题目是easy难度,但是如果找出这个规律,是很难做出这道题目的。

leetcode 160 简单难度 相交链表相关推荐

  1. 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣

    实现一种算法,找出单向链表中倒数第 k 个节点.返回该节点的值 1.今天在LeetCode练习一道单链表的题(题目如上),虽然不难,但是却极大的触动了我学习算法的兴趣.因为当你看到大神的解法时,你真的 ...

  2. [剑指offer]面试题第[52]题[Leedcode][第160题][JAVA][相交链表][双指针]

    [问题描述][简单] [解答思路] 1. 双指针法 时间复杂度:O(N^2) 空间复杂度:O(1) public ListNode getIntersectionNode(ListNode headA ...

  3. leetcode刷题:相交链表

    题目: 分析: 判断两个链表是否相交,可以使用哈希集合存储链表节点. 首先遍历链表 \textit{headA}headA,并将链表 \textit{headA}headA 中的每个节点加入哈希集合中 ...

  4. 【小Y学算法】⚡️每日LeetCode打卡⚡️——42. 相交链表

  5. 《LeetCode力扣练习》第160题 相交链表 Java

    <LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...

  6. 【LeetCode】【HOT】160. 相交链表

    [LeetCode][HOT]160. 相交链表 文章目录 [LeetCode][HOT]160. 相交链表 package hot;class ListNode{int val;ListNode n ...

  7. 【Leetcode】拿捏链表(四)——160. 相交链表、141. 环形链表、142. 环形链表 II

    作者:一个喜欢猫咪的的程序员 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民 ...

  8. LeetCode Algorithm 160. 相交链表

    160. 相交链表 Ideas 这题之前左神算法课的时候也讲过,那是一个带环的相交链表,不过原理都是一样的. 双指针,a指针先沿着headA开始走,走到头之后开始沿着headB继续走,b指针先沿着he ...

  9. LeetCode hot-100 简单and中等难度,51-60.

    142. 环形链表 II 难度中等570收藏分享切换为英文关注反馈 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示 ...

最新文章

  1. 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
  2. win7启动后报丢失nscmk.dll解决解决方式
  3. java 二维链表_Java数据结构与算法----数组与链表
  4. 放学默示录Ⅰ:来!抠奖 移动游戏策划案
  5. 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
  6. 优化SQL的执行速度
  7. ipsec说明以及隧道案例
  8. MySQL中 Data truncated for column ‘xxx‘解决方法
  9. Codeforces - 474D - Flowers - 构造 - 简单dp
  10. Android 权限清单大全
  11. 郝斌——数据结构笔记(数组、链表、栈、队列)(递归)
  12. matlab飞机高度控制,基础知识 | 飞行中的各种高度(三)
  13. android 4.4 hifi,Android系统HiFi手机需要解决什么问题?_音频新闻-中关村在线
  14. nmap识别TCP端口服务的数据库
  15. NX二次开发-UFUN新建工程图UF_DRAW_create_drawing
  16. (CVPR-2021)动态区域感知卷积
  17. 03_CSS字符属性
  18. 固定资产拆分比例怎么计算_资产拆分
  19. 中国文化产业基地(园区)前景预测和发展战略规划建议报告2021年版
  20. 全球与中国远程监控(M&C)系统市场深度研究分析报告

热门文章

  1. spring 多数据源动态切换
  2. ntko office在线编辑控件问题记录
  3. mysql 取某个范围内随机日期
  4. 如何检出SVN老版本代码
  5. Web 标准实战的评论
  6. react native 学习笔记
  7. PyQt5——布局管理
  8. 测试框架 Jest 实例教程
  9. linux程序员的proc文件系统
  10. Linux系统命令三剑客之 awk