2016-04-09 5 views
-1

İşlev çağrısı yardımıyla bir bağlantı listesindeki bir öğeyi eklediğimizde, örneğin doğrudan kafa geçirmemek yerine kafa referansını iletmek için neden gerekliyse ... void push kullanıyoruz (push node ** head_ref, int new_data) void push yerine (struct node * head, int new_data) .. itme işlevi eleman eklemeye yaramaktadır ..?İşlev çağrısı kullanılarak bağlantılı liste ekleme sorunu

Sen fonksiyon argümanı (yani o sonunda bir öğe ekleyerek veya başında mı?) Böyle ana ait

biri neden tam belirlemek için itme fonksiyonu üzerine yeterli bilgi vermediği

+0

Referansdan emin olmadığım için, "başlığın" kendisinin güncellenmesi gerektiğine inanıyorum. Kesin bir cevap vermek için kodun tamamına ihtiyacınız var –

cevap

0

Bir işaretçiyi bir işaretçiye iletmenin nedenleri, baş işaretçisinin değişip değişmediğini ve işlev çağrısından sonra değişiklik yapmayı sürdürmenizdir.

Ekleme işlevinin bu argüman yapısına neden sahip olduğunu düşündüğüm iki olasılık var.

İtme işleviniz listenin sonuna ekleniyorsa, ekleme işlevinin boş bir liste vermesi (bu durumda boş bir işaretçi) baş işaretçisi, boş göstericiden tek öğenin adresine değişir. şimdi baş olan sokuldu.

İtme işleviniz her seferinde başa takılıyorsa, baş düğümünün adresi sürekli olarak değişmektedir.

aşağıdaki bağlantılı liste Örneğin

1 ihtiva eden düğüme baş gösterici noktası: ön bağlantılı liste temsil veri öğesi 5 basıldıktan sonra

1 -> 2 -> 3 -> 4

aşağıdaki gibi olacaktır:

kafa işaretçi işaret etmelidir nereye

5 -> 1 -> 2 -> 3 -> 4

Yani 5 şimdi. Ancak itme işlevi void push(struct node *head_ref, int new_data) argüman yapısına sahip olsaydı, o zaman head_ref, fonksiyondan çıktıktan sonra 1 içeren düğüme işaret ediyordu. Ancak, void push(struct node **head_ref, int new_data) ile geçerli header_ref'un konumuna yapılan değişiklikler işaretçiye kaydedilir.