每日一题 leetcode160-相交链表

相交链表

https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

思路一 双指针:

(1)首先指针A和指针B分别指向headA和headB,每一步两个指针都向后移动一步,如果A和B指向同一个节点,那么就找到了相交节点。当指针A指向null的时候,下一步指向headB,当指针B指向null的时候,下一步指向headA。
(2)正确性验证:
假设链表headA的私有部分长度为m,headB的私有部分长度为n,公有部分长度为c(如果不相交那么公有部分长度c为0),若m==n,指针A和指针B不用遍历到另外一个链表就会相遇;若m!=n,那么他们在第二圈也会相遇,走过的距离都是m+n+c;如果链表不相交,那么最后都指向null。

代码:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA == null || headB == null){
            return null;
        }
        ListNode pointA = headA;
        ListNode pointB = headB;
        while(pointA != pointB){
            pointA = pointA==null ? headB : pointA.next;
            pointB = pointB==null ? headA : pointB.next;
        }
        return pointA;
    }
}

思路二:哈希表

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入...
    FesonX阅读 3,408评论 0 0
  • 160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 示例 1: 输入:intersectVal = ...
    TheKey_阅读 1,950评论 0 1
  • 题目描述:编写一个程序,找到两个单链表相交的起始节点。 示例: 输入:intersectVal = 8, list...
    windUtterance阅读 1,287评论 0 0
  • 题目 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在结点c1开始相交 题目链接 示例 题目分...
    唐三斤阅读 884评论 0 0
  • 题目 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入...
    禾木清清阅读 1,066评论 0 0