2016-04-08 36 views
0

belirli bir düğümden önce I eklemek içintakma düğümleri iki kat bağlantılı liste

Düğümler "2" düğümden önce düğümlerin aşağıdaki eklemek zorunda

8 <-> 2 <-> 12 

aşağıdaki gibi iki kat bağlantılı liste oluşturduk 22, 23, 15)

Düğüm "2" den önce "8" düğümü zaten mevcut, Bu durumda "8" düğümünü tekrar eklemek istemiyorum. "Eklenecek düğümün" nün düğümden önce var olup olmadığını kontrol etmenin herhangi bir yolu var mı?

Güncel Liste:

1 ↔ 2 ↔ 3

Seriyi tekrarlamak istemiyorsanız

Ben Ancak 8 <-> 22 <-> 23 <-> 15 <-> 2 <-> 12

cevap

0

olarak nihai DLL istiyorum 3'ten önce yerleştirin: (1, 2, 4)

Sonucu istedik:

Bu biraz daha karmaşık hale

1 ↔ 2 ↔ 4 ↔ 3

, ama çok değil. Eğer üs olarak maçları kullandığınız önce düğüm senin herhangi düğümleri tanıtmak Öncelikle

, kontrol edildi. Sonuncusu için başlayarak (böylece her zaman en uzun seri tekrarlanır ve bundan kaçınırsınız).

Biri, ile eşleşiyorsa, dizinin geri kalanının da eşleşip eşleşmediğini kontrol edin. Eğer öyleyse, bir sonraki ile başlayın (ya da sonuncu ise, hiçbirini eklemeyin); Yoksa, İlk adımına geri dönün.

İkinci ve sadece tabanı önce onları ekleyin (Eğer İlk herhangi maç sadece ilk birinde başlamadı ise) Eklemek sonraki düğümü seçtikten sonra son.

düşünüldüğünde:

main { 
    int from = 0; 
    for (int i = toAdd.length - 1; i >= 0; i--) { 
     if (checkSerie(toAdd, i, base) { 
      from = i; 
      break; 
     } 
    } 

    // And add: 
    for (int i = from; i < toAdd.length; i++) { 
     addBefore(3, toAdd[i]); // Your add method. 
    } 
} 

private boolean checkSerie (int[] toAdd, int index, Node base){ 
    Node prev = base.prev; 
    if (index < 0) { 
     return true; 
    } 

    if (toAdd[index] != prev) { 
     return false; 
    } 

    return checkSeriei (toAdd, index - 1, prev); 
} 

Not:

int[] toAdd = {1, 2, 4}; 

Örneğin, recursivity kullanabilirsiniz

Bu

ben kesin uygulanmasını bilmiyorum çünkü yalancı kod olduğunu : Bunu test etmedim, buggy olabilir (belki bazı yanlış -1 veya bunun gibi şeyler), ama bu fikri elde etmenize yardımcı olmak için yeterli olmalıdır.

+0

Ve başka bir şey kastetmişseniz, sadece yorum yapın ve ben düzenleyeceğim veya yeni bir cevap yazacağım. – dquijada

+0

Seçenek 2'yi yapmak istiyorum. Kod verirseniz benim için faydalı olacaktır. – Leks

+0

Düzenlemeyi kontrol edin, İyi bir kod değil (== ve! = Örneğin çalışmaz, çünkü inters ve nesneleri karşılaştırıyorsunuz, bunu uygulamanız gerekiyor) ve test edilmiyor, ama umarım anlamanıza yardımcı olur. Eğer varsa, bunu cevaplandı olarak işaretlemeyi unutmayın. – dquijada