Özet - Linked List Oluşturucu
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 24 / 107.
Görev
KolaySıfırdan bir bağlı liste (linked list) oluşturalım! Her düğümün bir sonrakini işaret ettiği, bellekte birbirine bağlı değerlerden oluşan bir zincir yapısı kuracaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
linkedlist.go:Value(int) veNext(*Node) alanlarına sahip birNodeyapısı (struct) tanımlayın.Headdüğümüne bir işaretçi (pointer) tutan birLinkedListyapısı oluşturun.*LinkedListüzerinde şu metotları uygulayın:Append- verilen değere sahip yeni bir düğümü listenin sonuna eklerPrepend- verilen değere sahip yeni bir düğümü listenin başına eklerPrint- listeyi baştan sona gezer ve tüm değerleri->ile ayırarak yazdırır, sonunanilekler
main.go: Girdiden değerleri okuyun, düğümleri sona ekleyerek (append) ve başa ekleyerek (prepend) bir bağlı liste oluşturun, ardından listenin son yapısını yazdırın.
Aşağıdaki girdiler sağlanacaktır:
- Satır 1: Sona eklenecek ilk değer
- Satır 2: Sona eklenecek ikinci değer
- Satır 3: Başa eklenecek değer
Print metodunuz listeyi şu formatta çıktı vermelidir:
[value1] -> [value2] -> [value3] -> nilÖrneğin, 10, 20 ve 5 verildiğinde, çıktınız şu şekilde olmalıdır:
5 -> 10 -> 20 -> nilAppend metodunun, yeni düğümü eklemeden önce listenin sonuna (Next değerinin nil olduğu yere) kadar ilerlemesi gerekir. Prepend metodu yeni bir düğüm oluşturmalı, bu düğümün Next alanını mevcut head'e yönlendirmeli ve ardından head'i yeni düğüm olarak güncellemelidir. Boş bir listenin head değerinin nil olduğunu unutmayın, bu nedenle Append metodunuzda bu durumu ele alın.
Kendin dene
package main
import "fmt"
func main() {
// Giriş değerlerini oku
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// Yeni bir bağlı liste oluştur
list := &LinkedList{}
// TODO: val1 ve val2'yi listeye eklemek için Append kullanın
// TODO: val3'ü listenin başına eklemek için Prepend kullanın
// TODO: Nihai liste yapısını yazdırın
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker Pool