持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
写在前面
今天还是一道难度为简单系列的题目,而且是我们刚做过的数据结构的题目。
也就是链表数据结构,解题思路也会沿用环形链表的方式进行解答,一起来看一下吧。
题目解读
从题目的标题来看,就能获知到这道题的目的,也就是从一个相交链表中获取某个值,或者是判断两个链表是否是相交链表。
仔细阅读题目内容后,我们就能知道是要获取两个链表相交时的那个元素对象。
在之前《环形链表》一题中,我们使用set集合来存储每一个节点对象,这次我们也可以这样干。
将其中一个链表的所有链表对象存入Set集合中。
在遍历另外一个链表,并且判断对象是否存在于上面的Set集合中,如果碰到存在的值,就可以判断存在相交情况,反之则无。
代码实现
本次执行的代码如下,使用的是循环加set集合同时处理的方式。既简单又暴力!
/**
* 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) {
Set<ListNode> set = new HashSet<>();
ListNode a = headA;
ListNode b = headB;
while (a != null){
set.add(a);
a = a.next;
}
while (b != null){
if(set.contains(b)){
return b;
}else{
b = b.next;
}
}
return null;
}
}
执行结果
排名还算可以,这道题没有多想,因为前两道题刚做了《环形链表》的一道题,跟这道题差不多。
其他思路
我看到有些大佬在使用指针方式解决这个问题,看起来是比这个高级,而且应该会更高效。
总结
本道题主要考察的还是链表数据结构,利用链表的结构特性来解答题目,就很轻松了,大家会了吗?