算法编程(十):相交链表

简介: 算法编程(十):相交链表

写在前面


今天还是一道难度为简单系列的题目,而且是我们刚做过的数据结构的题目。

也就是链表数据结构,解题思路也会沿用环形链表的方式进行解答,一起来看一下吧。

image.png

题目解读


从题目的标题来看,就能获知到这道题的目的,也就是从一个相交链表中获取某个值,或者是判断两个链表是否是相交链表。

仔细阅读题目内容后,我们就能知道是要获取两个链表相交时的那个元素对象。

在之前《环形链表》一题中,我们使用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;
    }
}

执行结果


排名还算可以,这道题没有多想,因为前两道题刚做了《环形链表》的一道题,跟这道题差不多。

image.png

其他思路


我看到有些大佬在使用指针方式解决这个问题,看起来是比这个高级,而且应该会更高效。

总结


本道题主要考察的还是链表数据结构,利用链表的结构特性来解答题目,就很轻松了,大家会了吗?


相关文章
|
6天前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
6天前
|
算法
【C算法】链表算法
【C算法】链表算法
|
5天前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
14天前
|
算法 Python
【Leetcode刷题Python】106.相交链表
采用双指针法来找出两个链表的相交起始节点,并详细解释了算法的时间和空间复杂度。
11 1
|
3天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
4 0
|
3天前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
4 0
|
3天前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
4 0
|
3天前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
4 0
|
5天前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表
|
11天前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
18 0