鏈表問題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;
}

 

發佈了57 篇原創文章 · 獲贊 34 · 訪問量 6476
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章