C++ ile öncelikle LinkedList içerisinde int türünde rastgele değer içeren 10 adet Node oluşturacağız ve ekrana yazdıracağız. Arından bu LinkedList içerisindeki Node’ların Item ortalamasını alıp LinkedList içerisinde ortalamanın altında kalan Node’ları sileceğiz ve ekrana yazdıracağız.

Umarız bu kodlar LinkedList ve Node mantığını anlamanızda yardımcı olacaktır.

Kaynak Kod: Umut ÇITLAK

 

#include <iostream>
using namespace std;

class Node
{
public:
int item;
Node* link;
Node()
{
item = 0;
link = NULL; 
}
};

class LinkedList
{
public:
void NodeEkle(int);
void NodeSil();
void NodeYazdir();
LinkedList()
{
ListBaslangic = NULL;
ListSon = NULL; 
}
private:
Node* ListBaslangic;
Node* ListSon;
};

void LinkedList::NodeEkle(int GelenItem) 
{
//BIŞARIDAN GELEN DEĞER İLE YENİ NODU OLUŞTURDUK. -----KOD BAŞLANGIÇ
Node* YeniNode = new Node;
YeniNode->item = GelenItem;
YeniNode->link = NULL;
//BIŞARIDAN GELEN DEĞER İLE YENİ NODU OLUŞTURDUK. -----KOD BİTİŞ


if (ListBaslangic == NULL) // BURADA BOŞ MU DİYE SORGULAMAMIZDAKİ AMAÇ EĞER İLK NODE OLUŞTURULUYORSA BAŞLANGIÇ VE SON BU İLK NODU GÖSTERSİN
{
ListBaslangic = YeniNode;
ListSon = YeniNode;
}
else //EĞER BOŞ DEĞİLSE DAHA ÖNCEDEN BAŞKA NODELAR VARDIR. LİSTENİN SONU OLARAK EN SON GELEN NODU TANIMLIYORUZ.
{
ListSon->link = YeniNode;
ListSon = YeniNode;
}
}

void LinkedList::NodeYazdir()
{
Node* GeciciNode = ListBaslangic;
while (GeciciNode != NULL)
{
cout << GeciciNode->item << " "; // NODU YAZDIRDIK.
GeciciNode = GeciciNode->link; // BİR SONRAKİ NODU GeciciNode ' A TANIMLADIK, DÖNGÜ DEVAM ETTİĞİ SÜRECE HER NODA UĞRAYACAK.
}
}

void LinkedList::NodeSil()
{
Node* PreGezici;
Node* Gezici = ListBaslangic;
float Toplam = 0, Say = 0, Ortalama = 0;

while (Gezici != NULL)
{
Say++;
Toplam = Toplam + Gezici->item;
Gezici = Gezici->link;//GEZİCİ YUKARIDA İŞLEMİNİ TAMAMLADI ŞİMDİ BİR SONRAKİ NODA GEÇECEK.
}

Ortalama = Toplam / Say;

Gezici = ListBaslangic->link;

while (Gezici != ListSon)// LİSTE BAŞLANGICI LİSTE SONUNU GÖSTERİYORSA ARASINDA NODE YOK DEMEKTİR. BUNUN SORGUSU YAPILMIŞ OLUYOR.
{
if (Gezici->item < Ortalama)
{
PreGezici = ListBaslangic;
while (PreGezici->link != Gezici) // SİLİNECEK NODU PREGEZİCİYE BULDURDUK
{
PreGezici = PreGezici->link;
}
PreGezici->link = Gezici->link;
delete Gezici;
Gezici = PreGezici;
}
Gezici = Gezici->link; // SİLSE DE SİLMESE DE İŞLEMLER TAMAMLANDIĞI İÇİN ARTIK BİR SONRAKİ NODU İŞARETLİYORUZ.

}

// LİST BAŞLANGICI DEĞİŞTİĞİNDE
Gezici = ListBaslangic;
if (Gezici->item < Ortalama) {
ListBaslangic = Gezici->link;
delete Gezici;
}
//LİST SONU DEĞİŞTİĞİNDE
Gezici = ListSon;
if (Gezici->item < Ortalama) {
PreGezici = ListBaslangic;
while (PreGezici->link != Gezici)
PreGezici = PreGezici->link;
ListSon = PreGezici;
ListSon->link = NULL;
delete Gezici;
}


}

int main()
{
int sayi;
LinkedList LL;
for (int i = 0; i < 10; i++)
{
sayi = rand() % 10;
LL.NodeEkle(sayi);
}
LL.NodeYazdir();
LL.NodeSil();
cout << endl;
LL.NodeYazdir();
system("pause");
}