写点什么

【LeetCode】两个链表的第一个公共节点 Java 题解

用户头像
HQ数字卡
关注
发布于: 2 小时前

题目描述

输入两个链表,找出它们的第一个公共节点。


示例 1:

输入: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 个节点。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 这个题目的首先要理解的一点是第一个公共节点不仅仅是值相等,地址也需要相等

  • 采用双指针解法的思路是将两个链表拼接在一起,然后去找公共部分。

代码

  • hashSet 解法


/** * 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) {        if (headA == null || headB == null) {            return null;        }        Set<ListNode> set = new HashSet<>();        while (headA != null) {            set.add(headA);            headA = headA.next;        }        while (headB != null) {            if (set.contains(headB)) {                return headB;            }            headB = headB.next;        }        return null;    }}
复制代码


  • 双指针解法


/** * 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) {        if (headA == null || headB == null) {            return null;        }        ListNode p1 = headA, p2 = headB;        while (p1 != p2) {            p1 = (p1 == null) ? headB : p1.next;            p2 = (p2 == null) ? headA : p2.next;        }
return p1; }}
复制代码

总结

  • hashSet 解法的时间复杂度是 O(n) , 空间复杂度是 O(n)

  • 双指针解法的时间复杂度是 O(n), 空间复杂度是 O(1)

  • 坚持每日一题,加油!

发布于: 2 小时前阅读数: 3
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】两个链表的第一个公共节点Java题解