写在前面
今天还是一道难度为简单系列的题目,而且是我们刚做过的数据结构的题目。
也就是链表数据结构,解题思路也会沿用环形链表的方式进行解答,一起来看一下吧。
题目解读
从题目的标题来看,就能获知到这道题的目的,也就是从一个相交链表中获取某个值,或者是判断两个链表是否是相交链表。
仔细阅读题目内容后,我们就能知道是要获取两个链表相交时的那个元素对象。
在之前《环形链表》一题中,我们使用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; } }
执行结果
排名还算可以,这道题没有多想,因为前两道题刚做了《环形链表》的一道题,跟这道题差不多。
其他思路
我看到有些大佬在使用指针方式解决这个问题,看起来是比这个高级,而且应该会更高效。
总结
本道题主要考察的还是链表数据结构,利用链表的结构特性来解答题目,就很轻松了,大家会了吗?