2016-03-25 22 views
1

Kullanıcının bir öğenin değerini girmesi durumunda, adresin * npt olarak adlandırılan yeni bir Düğüme kaydedileceği Bul adlı bir yöntem kullanıyorum.Düğümün önceki düğümün adresi kullanılarak silinmesi

* npt argüman olarak kullanıldığında, npt olarak kaydedilen değerden sonra değeri kaldıran bir silme yöntemi oluşturmam gerekiyordu.

Örneğin, bu benim listemizse: 134, 564, 674, 253 ve Find için 674 girin, sonra 253 silindi.

void LinkedList::Delete(Node *PrePosition){ 
Node *temp = PrePosition -> next; 
PrePosition->next = PrePosition->next->next; 
delete temp; 
} 

olsa bu sorun, şu anda baş düğümünü silmek için bir yol yoktur olmasıdır:

Şu anda, bu silme fonksiyonu için benim kodudur. Bana gerçekten yardım etmeyen tek ipucu şu: Bu, listenin başını silmek istiyorsanız PrePosition is NULL.

+0

Tahminen 'LinkedList' sınıf listesinin başını bağlayan bir' Düğüm * 'head' denilen' işaretçi vardır. Yani argümanınız için bir "NULL" alırsanız, o zaman kafa işaretçisini kullanarak aynı kodu çalıştırın. –

+0

Bu, muhtemelen bölümümde inanılmaz derecede aptalca görünecektir, ancak Bul yöntemi bir int gerektirir. Argümanı NULL olarak ayarlamak nasıl mümkün olabilir? – Bob

+0

@Bob Kodunuz buna izin veriyorsa -1 değerini döndürebilirsiniz. –

cevap

0

Yinelemeli bir sürüm yapmanız gerektiğini varsayarsak. Head için bir koşul yapın.

Şimdi
Node* find(T value){ 
    if (head->value == value) 
     return nullptr; 
    return find(head->next); 

Sil içinde: Içinde Bul

void Delete(Node * pre) { 
    Node* temp; 
    if (pre == nullptr) { 
     temp = head; 
     head = head->next; 
    } else { 
     temp = pre->next; 
     pre->next = pre->next->next; 
    } 
    delete temp; 
} 
+0

Bu yöntemin, bir düğüm olmayan herhangi bir değerin kafayı silmesini sağlayacak şekilde yapması gerekiyor mu? Yazım hataları durumunda oda bırakıyor gibi görünüyor. – Bob

+0

Bir nullptr'de geçiş yaparsanız, başlık silinir. Durumun böyle olmasını istemiyorsanız, bir silme başlığı işlevi oluşturun. Bu Silme işlevi gizli olmalı, bu yüzden yazım hatası yapan tek kişi sensin ... – user2913685

İlgili konular