Bağlantılı Listeyi Ters Çevir (C++)

Baglantili Listeyi Ters Cevir C



Bu LinuxHint eğitiminde C++'da Bağlantılı Liste nasıl tersine çevrilir gösterilmektedir. Bağlantılı bir listeyi tersine çevirdiğinizde, bağlantı yolu tersine çevrilir ve baş, kuyruk olur ve kuyruk da baş olur. Düğümlerin konumlarını değiştirerek bunu hızlıca anlayabiliriz. Bu değiş tokuşta, sadece düğümlerin konumlarını soldan sağa veya tam tersi şekilde değiştiriyoruz.

bağlantılı liste: Bu, tersine çevirmek istediğimiz bağlantılı bir listedir.







Ters bağlantılı listeden sonra: Aşağıdaki, yukarıda bağlantılı listeyi tersine çevirdikten sonraki sonuç olacaktır.





Yukarıdaki örnek diyagramda, bağlantılı listeyi tersine çevirdiğimizde baş düğümün ve kuyruk düğümün konumlarının değiştiğini görebiliriz. Artık bir kuyruk düğümü olan baş düğüm, artık bir kuyruk düğümü olduğu için boş düğümü işaret eder.





Algoritma Adımları

  1. Bir ana metot oluşturuyoruz ve bazı gerekli değişkenleri bildiriyoruz.
  2. Ardından, bir sonraki adımımız, bağlantılı bir liste oluşturabilen bir yöntem oluşturmaktır. Bu yöntem, bağlantılı bir liste oluşturmamıza yardımcı olur.
  3. Bir sonraki adım, bağlantılı listeyi tersine çevirmek için bir yöntem oluşturmaktır. Bu yöntemde tüm bağlantılı listeyi geçiyoruz ve bu yöntem bağlantılı listeyi tersine çevirecek.
  4. Şimdi, sonucumuzu tersine çevirdikten sonra görüntülemek için başka bir yönteme ihtiyacımız var.
  5. Yukarıdaki tüm bu yöntemleri ana yöntemimizde birleştireceğiz.

Ters bağlantılı listeyi, anlaşılmasını kolaylaştırmak için resimli bir form kullanarak açıklayacağız. Öyleyse örnekle başlayalım.

Aşağıda, tersine çevirmek istediğimiz bağlantılı bir liste bulunmaktadır.



Aşama 1 . Yeşil renkli düğüm, başlangıçtaki ilk düğümü işaret eden bir baş düğümdür.

Adım 2. Bir sonraki adımda, başlık düğümünün yanındaki boş işaretçiyi bulana kadar tüm bağlantılı listeyi dolaşacağız. Bunun için sonraki düğüme aşağıdaki şemada gösterildiği gibi geçici bir ad atayacağız.

Aşama 3. 'Geçici' adında yeni bir referans düğümümüz olduğundan, bu, boş işaretçiyi alana kadar tüm bağlantılı listeyi dolaşmamıza yardımcı olabilir, böylece başlık düğümünün bir sonraki bağlantısını boş olarak ayarlayabiliriz, bu da bağlantılı aşağıda şemada gösterildiği gibi listeleyin. Geçerli düğümün yanındaki boş işaretçi, önceki düğüm olarak adlandırılır.

Adım 4. Şimdi, geçici düğümü sonraki düğüme ve mevcut düğümü önceki geçici düğüme taşıyoruz. Şimdi bir sonraki düğüme geçtik. Ayrıca önceki düğümü sıfırdan geçerli düğümün yalnızca önceki düğümüne değiştiririz. Şimdi geçici düğüm, boş işaretçiye kadar olan tüm geçişlerle ilgilenecek, böylece mevcut düğümün bağlantısını önceki düğüme ayarlayabiliriz ve şimdi aşağıdaki diyagramda gösterildiği gibi önceki düğümü işaret ediyor.

Böylece aynı adımları takip ediyoruz ve sonunda ters bağlantılı bir liste elde edeceğiz.

Adım 5 .

Adım 6.

Adım 7.

Adım 8.

Adım 9.

Adım 10.

Adım 11.

Adım 1/2.

Adım 13.

Adım 14. Bu adımda, bağlantılı listemiz tersine döndü.

Bağlantılı bir listeyi tersine çevirmek için C++ Programı

#include
kullanarak ad alanı std ;

// Düğümü oluşturma yöntemi
yapı düğüm {
int değer ;
düğüm * sonrakiNodePtr ;
} * düğüm nesnesi ;

geçersiz Bağlantılı Liste oluştur ( int n ) ;
geçersiz ters Bağlantılı Liste ( düğüm ** düğüm nesnesi ) ;
geçersiz Görüntüle ( ) ;

int ana ( ) {
int n,değer,öğe ;
cout << 'Kaç adet düğüm oluşturmak istiyorsunuz =>: ' ;
yemek yiyor >> n ;
Bağlantılı Liste oluştur ( n ) ;
cout << ' \n Bağlantılı listedeki bilgiler: \n ' ;
Görüntüle ( ) ;
cout << ' \n Tersine çevrildikten sonra bağlantılı liste \n ' ;
ters Bağlantılı Liste ( & düğüm nesnesi ) ;
Görüntüle ( ) ;
dönüş 0 ;
}
// Bu metot bağlantılı listeyi oluşturacaktır.
geçersiz Bağlantılı Liste oluştur ( int n ) {
yapı düğüm * ön Düğüm, * tempNode ;
int değer ben ;

düğüm nesnesi = ( yapı düğüm * ) alışveriş merkezi ( boyutu ( yapı düğüm ) ) ;
eğer ( düğüm nesnesi == HÜKÜMSÜZ )
cout << 'Bellek atamak için yeterli değil' ;
başka {
cout << 'Lütfen düğüm 1'in bilgisini girin (yalnızca sayı): ' ;
yemek yiyor >> değer ;
düğüm nesnesi - > değer = değer ;
düğüm nesnesi - > sonrakiNodePtr = HÜKÜMSÜZ ;
tempNode = düğüm nesnesi ;

için ( i = iki ; i <= n ; i ++ ) {
ön düğüm = ( yapı düğüm * ) alışveriş merkezi ( boyutu ( yapı düğüm ) ) ;

// Bağlantılı listede herhangi bir düğüm yoksa
eğer ( ön düğüm == HÜKÜMSÜZ ) {
cout << 'Bellek tahsis edilemez' ;
kırmak ;
}
başka {
cout << 'Lütfen düğüm bilgisini giriniz' << i << ':' ;
yemek yiyor >> değer ;
ön düğüm - > değer = değer ;
ön düğüm - > sonrakiNodePtr = HÜKÜMSÜZ ;
tempNode - > sonrakiNodePtr = ön düğüm ;
tempNode = tempNode - > sonrakiNodePtr ;
}
}
}
}

geçersiz ters Bağlantılı Liste ( düğüm ** düğüm nesnesi ) {
yapı düğüm * tempNode = HÜKÜMSÜZ ;
yapı düğüm * Önceki Düğüm = HÜKÜMSÜZ ;
yapı düğüm * akım düğümü = ( * düğüm nesnesi ) ;
süre ( akım düğümü ! = HÜKÜMSÜZ ) {
tempNode = akım düğümü - > sonrakiNodePtr ;
akım düğümü - > sonrakiNodePtr = Önceki Düğüm ;
Önceki Düğüm = akım düğümü ;
akım düğümü = tempNode ;
}
( * düğüm nesnesi ) = Önceki Düğüm ;
}
geçersiz Görüntüle ( ) {
yapı düğüm * tempNode ;
eğer ( düğüm nesnesi == HÜKÜMSÜZ ) {
cout << 'Bağlantılı liste boş' ;
}
başka {
tempNode = düğüm nesnesi ;
süre ( tempNode ! = HÜKÜMSÜZ )
{
cout << tempNode - > değer << ' \t ' ;
tempNode = tempNode - > sonrakiNodePtr ;
}
}
cout << son ;
}

Çıktı

Kaç tane düğüm oluşturmak istiyorsunuz =>: 6
Lütfen düğüm 1'in bilgisini girin (yalnızca sayı): 101
Lütfen düğüm 2'nin bilgisini girin: 95
Lütfen düğüm 3'ün bilgisini girin: 61
Lütfen düğüm 4: 19'un bilgisini girin
Lütfen düğüm 5: 12'nin bilgisini girin
Lütfen düğüm 6: 11'in bilgisini girin

Bağlantılı listedeki bilgiler:
101 95 61 19 12 11

Tersine çevrildikten sonra bağlantılı liste
11 12 19 61 95 101

Çözüm

Bu LinuxHint makalesi, C++'da bağlantılı bir listenin nasıl tersine çevrileceğini gözden geçirdi. Bağlantılı bir listeyi tersine çevirmek için başka yöntemler de vardır, ancak bu, bağlantılı bir listeyi tersine çevirmek için çok yaygın bir yöntemdir. Sorunlarınızı nasıl çözmek istediğinize karar vermek size kalmıştır, ancak genellikle ters bağlantılı liste işlevi, işaretçi değiş tokuşlu basit bir döngü olmalıdır.