2016-04-16 13 views
0

この挿入ソートは二重リンクリストに属します。それは何も印刷されていないようです。もしこれが厄介であれば申し訳ありません。私は物事を投稿するのはかなり新しいです。私はsysoutを入れてデバッグしました。私はsysoutを使用したスワップに問題があると考えています&私はこれが問題の発生場所であることに気付きました。どんな助けでも大歓迎です。私はまた、うまく見える私のアプリケーションクラスをチェックしました。挿入のスワップ二重リンクリストでは動作しません

public boolean insertionSort() 
{ 
if (getFirst().next != null) 
{ 
    return false; 
} 
    Link current = getFirst().next; 
    Link current2 = current; 

    while(current != null){ 
    current2 = current; 
    while(current2.prev != null){ 
     int tempID = Integer.valueOf(current2.Data.getID()); 
     int temp2ID = Integer.valueOf(current2.prev.Data.getID()); 
if(tempID < temp2ID) 
    { 
    swap(current2, current.prev); 
    } 
    current2 = current2.prev; 
} 
    current = current.next; 
} 
    return true; 
} 


public void swap(Link x, Link y) 
    {  

    Link previousNode1 = x.prev; 

    Link nextNode1 = x.next; 

    Link previousNode2 = y.prev; 

    Link nextNode2 = y.next; 


    if (x.next == y || y.next == x) 
    { 

     previousNode1.next = y; 

     y.prev = (previousNode1); 

     nextNode2.next = (x); 

     x.next = (nextNode2); 

     x.prev = (y); 

     y.next = (x); 
    } 


    else 
    { 
     y.prev = (previousNode1); 

     y.next = (nextNode1); 

     nextNode1.prev = (y); 

     previousNode1.next = (y); 

     x.prev = (previousNode2); 

     x.next = (nextNode2); 

     nextNode2.prev = (x); 

     previousNode2.next = (x); 
    } 

} // end swap 

答えて

0

コードの一部のみを指定しました。したがって、正確に何が間違っているのか把握するのは難しいです。しかし、あなたの挿入ソート方法を一目見ただけで、これは間違っているものです:非常にあなたが条件文を持って始めて

if (getFirst().next != null){ 
    return false; 
} 

これは、getFirstとは、()次のnullでない場合、関数はすぐに返すことを意味します。。プログラムフローがこの条件を満たす、すなわちgetFirst()。nextがnullの場合、nullにcurrentとcurrent2という2つの変数を割り当てます。そして、条件while(current != null){...}でwhileループを実行します。この機能はどのように機能するのでしょうか?

まず、if条件を修正します。おそらくgetFirst()。nextがnullの場合にのみ返す必要があります(nullでない場合は戻りません)。次に、あなたが望む出力を得るかどうかを見てください。そうでない場合は、問題の詳細をお知らせください。

関連する問題