2012-05-01 4 views
1

マイアルゴスキップM要素とのLinkedListからN個の要素を削除し、それがすべての基本的なテストケースのために働いたが、スキップ値0と1が失敗している、削除された0調達の問題

private static MyList skip$DeleteItem(MyList L , int M , int N){ 
    MyList curr = L; 
    MyList prev = null; 
    while(curr != null){ 
     int counter = 0; 
     while(curr != null && counter <M){ 
      prev = curr; 
      curr = curr.next; 
      counter++; 
     } 
     counter = 0; 
     while(curr != null && counter < N){ 
      curr = curr.next; 
      if(prev == null){     
       prev = curr; 
      } 
      else{    
      prev.next = curr; 
      }    
      counter ++; 
     } 
    } 

    return L; 
} 

をスキップ。

入力 - 9 - > 34 - > 8 - > 7 - > 5 - > 4 - > 6 - > 3 - > 1 - > 2 - > TAIL

出力リレー - 9 - > 34 - > TAIL期待

- NULL(すべての要素が削除されるべきであるとして)

ソリューションは、あなたの "飛ばし" の部分はOKのようです

while(curr != null && counter < N){  
       curr = curr.next; 
       if(prev == null){     
        curr = curr.next; 
        L = curr; 
       } 
       else{    
       prev.next = curr; 
       }    
       counter ++; 
      } 

答えて

2

ました削除部分には問題があります。最初の繰り返しで

while(curr != null && counter < N){ 
     curr = curr.next; 
     if(prev == null){     
      prev = curr; 
     } 
     else{    
     prev.next = curr; 
     }    
     counter ++; 
    } 

、あなたは、まず次の要素にCURRポインタを進め、そして、if(prev == null)あなた事前前の同じCURRへ。

あなたの例では、最初の繰り返しの最後に、currとprevの両方が34を指しています。 その後、残りのリストは正しく削除されます。

関連する問題