leetcode 160 简单难度 相交链表
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 简单难度 相交链表相关推荐
- 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣
实现一种算法,找出单向链表中倒数第 k 个节点.返回该节点的值 1.今天在LeetCode练习一道单链表的题(题目如上),虽然不难,但是却极大的触动了我学习算法的兴趣.因为当你看到大神的解法时,你真的 ...
- [剑指offer]面试题第[52]题[Leedcode][第160题][JAVA][相交链表][双指针]
[问题描述][简单] [解答思路] 1. 双指针法 时间复杂度:O(N^2) 空间复杂度:O(1) public ListNode getIntersectionNode(ListNode headA ...
- leetcode刷题:相交链表
题目: 分析: 判断两个链表是否相交,可以使用哈希集合存储链表节点. 首先遍历链表 \textit{headA}headA,并将链表 \textit{headA}headA 中的每个节点加入哈希集合中 ...
- 【小Y学算法】⚡️每日LeetCode打卡⚡️——42. 相交链表
- 《LeetCode力扣练习》第160题 相交链表 Java
<LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...
- 【LeetCode】【HOT】160. 相交链表
[LeetCode][HOT]160. 相交链表 文章目录 [LeetCode][HOT]160. 相交链表 package hot;class ListNode{int val;ListNode n ...
- 【Leetcode】拿捏链表(四)——160. 相交链表、141. 环形链表、142. 环形链表 II
作者:一个喜欢猫咪的的程序员 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽. --<人民 ...
- LeetCode Algorithm 160. 相交链表
160. 相交链表 Ideas 这题之前左神算法课的时候也讲过,那是一个带环的相交链表,不过原理都是一样的. 双指针,a指针先沿着headA开始走,走到头之后开始沿着headB继续走,b指针先沿着he ...
- LeetCode hot-100 简单and中等难度,51-60.
142. 环形链表 II 难度中等570收藏分享切换为英文关注反馈 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示 ...
最新文章
- 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
- win7启动后报丢失nscmk.dll解决解决方式
- java 二维链表_Java数据结构与算法----数组与链表
- 放学默示录Ⅰ:来!抠奖 移动游戏策划案
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
- 优化SQL的执行速度
- ipsec说明以及隧道案例
- MySQL中 Data truncated for column ‘xxx‘解决方法
- Codeforces - 474D - Flowers - 构造 - 简单dp
- Android 权限清单大全
- 郝斌——数据结构笔记(数组、链表、栈、队列)(递归)
- matlab飞机高度控制,基础知识 | 飞行中的各种高度(三)
- android 4.4 hifi,Android系统HiFi手机需要解决什么问题?_音频新闻-中关村在线
- nmap识别TCP端口服务的数据库
- NX二次开发-UFUN新建工程图UF_DRAW_create_drawing
- (CVPR-2021)动态区域感知卷积
- 03_CSS字符属性
- 固定资产拆分比例怎么计算_资产拆分
- 中国文化产业基地(园区)前景预测和发展战略规划建议报告2021年版
- 全球与中国远程监控(M&C)系统市场深度研究分析报告