链表问题11——两个单链表相交的系列问题(二):找到两个无环链表的交点

题目

判断两个无环链表是否相交,相交则返回第一个相交节点,否则返回null


思路

  1. 分别遍历链表1和链表2,最后一个节点分别即为end1和end2,长度分别记为len1和len2
  2. 如果end1不等于end2,则不相交,否则相交
  3. 比较len1和len2,哪一个链表长就先走|len1-len2|步,然后同步走,第一次会和的节点就是需要返回的节点

源码

public class Node{
	public int value;
	public Node next;
	public Node(int data){
		this.value=data;
	} 
}

public Node noLoop(Node head1,Node head2){
	if(head1==null||head2==null){
		return null;
	}
	Node cur1=head1;
	Node cur2=head2;
	int n=0;
	while(cur1.next!=null){
		n++;
		cu1=cur1.next;
	}
	while(cur2.next!=null){
		n--;
		cu2=cur2.next;
	}
	if(cur1!=cur2){
		return null;
	}
	cur1=n>0?head1:head2;
	cur2=cur1==head1?head2:head1;
	n=Math.abs(n);
	while(n!=0){
		n--;
		cur1=cur1.next;
	}
	while(cur1!=cur2){
		cur1=cur1.next;
		cur2=cur2.next;
	}
	return cur1;
}
发布了43 篇原创文章 · 获赞 21 · 访问量 4904

猜你喜欢

转载自blog.csdn.net/flying_1314/article/details/103926023