タイトル
二つのリストがあります。そうでない場合はnull、最初の交差点ノードの交差点が返され、交差リングか否かが判断されます
この問題を考えるには、以前の記事の解決策によると、我々はLOOP1とLOOP2それぞれ、各リストの入力点を持っています
思考
以下は、3つの特定の問題解決のプロセスです:
- LOOP1 == LOOP2場合、我々はAの前でLOOP1この期間、この問題と2に、リスト1 HEAD1の最初のノードから最初の交差点、この段落にリストヘッドノード2 HEAD2 LOOP2を考慮するのみ必要同様の記事。
- !LOOP1 =ループ2、二つのリストがある場合は交差することができる、交差がない場合があります。交差点をよく理解せずに、事態の交差点は、二つのリングの合計リストとリストですが、ポイントは同じノードの一部ではありません。
- 当時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;
}
}