其他分享
首页 > 其他分享> > hash表解决有环单链表判相交

hash表解决有环单链表判相交

作者:互联网

问题:
在这里插入图片描述思路:
有环单链表判断是否相交时,只需要求出各个链表的相交结点,在判断该相交节点是否是同一个,是,则说明相交。不是时,需要分为两种个情况。

当入环节点是同一个:
在这里插入图片描述当入环节点不是同一个时,两种情况:

在这里插入图片描述
核心代码:

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class ChkIntersection {
    //有环单链表相交需要分为两种情况,相交节点是同一个,相交节点不是同一个
    public boolean chkInter(ListNode head1, ListNode head2, int adjust0, int adjust1) {
        // write code here
        //获得各个有环链表的第一个相交结点
        ListNode loop1=getLoopNode(head1);
        ListNode loop2=getLoopNode(head2);
        //判断两个相交节点是否是同一个
        if(loop1==loop2){//是同一个,说明两个链表相交
            return true;
        }
        //不是同一个时:看两者是否相交
        ListNode cur=loop1.next;
        while(cur!=loop1){//遍历环上的节点看看有没有loop2
            if(cur==loop2){
                return true;
            }
            cur=cur.next;
        }
        return false;
    }
    
    //找有环单向链表的第一个相交节点
    public ListNode getLoopNode(ListNode node){
        HashSet<ListNode> set=new HashSet<>();
        while(!set.contains(node)){//当结点不在集合中,添加
            set.add(node);
            node=node.next;
        }
        //当结束时,找到第一个相交结点
        return node;
    }
}

标签:node,ListNode,cur,相交,有环,hash,节点,表判,同一个
来源: https://blog.csdn.net/qq_43430343/article/details/120524861