一連の質問を交差11--単一のリスト2つのリストの問題(C):2つのチェーンリングが交差しているかどうかを判断します

タイトル

二つのリストがあります。そうでない場合はnull、最初の交差点ノードの交差点が返され、交差リングか否かが判断されます

この問題を考えるには、以前の記事の解決策によると、我々はLOOP1とLOOP2それぞれ、各リストの入力点を持っています


思考

以下は、3つの特定の問題解決のプロセスです:

  1. LOOP1 == LOOP2場合、我々はAの前でLOOP1この期間、この問題と2に、リスト1 HEAD1の最初のノードから最初の交差点、この段落にリストヘッドノード2 HEAD2 LOOP2を考慮するのみ必要同様の記事。
  2. !LOOP1 =ループ2、二つのリストがある場合は交差することができる、交差がない場合があります。交差点をよく理解せずに、事態の交差点は、二つのリングの合計リストとリストですが、ポイントは同じノードの一部ではありません。
  3. 当時LOOP1後LOOP2に会っていない場合はLOOP1!=ループ2は親切な状況のため、ループ1からリストを作るもの時点を判断するためには、その手段が交差する、そうでない場合とが交差し、リターンLOOP1とLOOP2はできません。

ソース

public class Node{
	public int value;
	public Node next;
	public Node(int data){
		this.value=data;
	} 
}
public Node bothLoop(Node head1, Node loop1, Node head2,Node loop2){

	Node cur1=null;
	Node cur2=null;
	if(loop1==loop2){
		cur1=head1;
	    cur2=head2;
	    int n=0;
	    while(cur1!=loop1){
	    	n++;
	    	cur1=cur1.next;
	    }
	    while(cur2!=loop2){
	    	n--;
	    	cur2=cur2.next;
	    }
	   	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;
	}else{
		cur1=loop1.next;
		while(cur1!=loop1){
			if(cur1==loop1){
				return loop1;
			}
			cur1=cur1.next;
			
		}
		return null;
	}
}

 

公開された43元の記事 ウォン称賛21 ビュー4859

おすすめ

転載: blog.csdn.net/flying_1314/article/details/103934206