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