2016-03-19 24 views
1

Zaten çok iyi çalıştı, tek başına bağlı döngüsel liste yaptım, ancak bu durumda, ben bu sorunu gidermek, kuyruk kaldırmak istiyorsanız, o kaldıracak Düğüm kuyruk olarak takıldıysa, ancak başa takılmışsa olmaz. Varsayalım ki, buradaki sorun, yerleştirme eklenti bağlantısı içinde ya da kuyruk işlevini silmekte, ancak bulamıyor. Yardımın için minnettar olacağım.C++ Çift bağlantılı liste "kuyruğu sil" işlevi

Yapısı:

struct Element{ 
int value; 
Element *prev, *next; 

};

struct List2W{ 
    Element *tail; 
}; 

Kodu:

void insertHead(List2W& l, int x){ 

Element *new_head = new Element; 
new_head->value=x; 

if(isEmpty(l)) 
{ 
    new_head->next=new_head; 
    new_head->prev=new_head; 
    l.tail=new_head; 
} 
else 
{ 
    new_head->next=l.tail->next; 
    new_head->prev=l.tail; 
    l.tail->next=new_head; 
} 

}

void insertTail(List2W& l, int x){ 

Element *new_tail = new Element; 
new_tail->value=x; 

if(isEmpty(l)) 
{ 
    new_tail->next=new_tail; 
    new_tail->prev=new_tail; 
} 
else 
{ 
    new_tail->next=l.tail->next; 
    new_tail->prev=l.tail; 
    l.tail->next=new_tail; 
} 
l.tail=new_tail; 

}

bool deleteTail(List2W& l, int &value){ 

if(isEmpty(l)) 
    return false; 

else if(l.tail->next==l.tail) 
    { 
     value=l.tail->value; 
     l.tail=NULL; 
    } 

else 
{ 
    value=l.tail->value; 
    (l.tail->prev)->next=l.tail->next; 
    (l.tail->next)->prev=l.tail->prev; 
    l.tail=l.tail->prev; 
} 
return true;} 

cevap

0

enter image description here

else 
    { 
     (l.tail->next)->prev=new_head; // here 
     new_head->next=l.tail->next; 
     new_head->prev=l.tail; 
     l.tail->next=new_head; 
    } 

Bana bu işlevini yeniden inceleyelim.Burdaki kavradı, @nariuji ederiz ve teşekkür ilgiden dolayı:
+0

Vay canına, resimler çizmekten bile rahatsız olmuşsun. Bunun için teşekkür ederim. Yine de neden bu imkansız olduğunu söylediğinizi anlamıyorum. Orada bir hata görmüyorum ve iyi çalışıyor gibi görünüyor. Lütfen, (1) 'in neden işe yaramadığını daha fazla açıklayabilir misiniz? new_tail-> next = l.tail-> next; // yeni elemandaki "sonraki" için, başa işaret eden kuyruk için aynı olanı atayım, bu yüzden bu yeni_diyen-> sonra, l.tail-> sonraki (kafa) işaret etmelidir – NoobProgrammerWannabe

+0

Anladım . Belki benim anlayışım yanlıştı. – nariuji

+0

Cevabımı düzenledim. İhtiyacınız varsa lütfen ona bakın. – nariuji

0

Tamam, benim inserthead fonksiyonu new_head ile baş önceki bağlanması gereken bir çizgi, eksikti. Bunun dışında, hafızayı boşaltmak için kuyruğu gerçekten silmeye özen göstermeliyim ve tamam olmalı.