Rekap: Pembuat Linked List
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 24 dari 107.
Tantangan
MudahMari buat linked list dari awal! Kamu akan membuat struktur data tempat setiap node menunjuk ke node berikutnya, membentuk rantai nilai yang saling terhubung di memori.
Kamu akan menyusun kodemu dalam dua file:
linkedlist.go: Definisikan structNodedengan fieldValue(int) danNext(*Node). Buat structLinkedListyang menyimpan pointer ke nodeHead. Implementasikan method berikut pada*LinkedList:Append- menambahkan node baru dengan nilai yang diberikan ke akhir listPrepend- menambahkan node baru dengan nilai yang diberikan ke awal listPrint- menelusuri list dan mencetak semua nilai yang dipisahkan oleh->, lalu diakhiri dengannil
main.go: Baca nilai dari input, buat linked list dengan menambahkan node ke akhir dan awal list, lalu cetak struktur list akhir.
Input berikut akan diberikan:
- Baris 1: Nilai pertama untuk ditambahkan ke akhir list
- Baris 2: Nilai kedua untuk ditambahkan ke akhir list
- Baris 3: Nilai untuk ditambahkan ke awal list
Method Print-mu harus menampilkan list dalam format ini:
[value1] -> [value2] -> [value3] -> nilMisalnya, jika diberikan 10, 20, dan 5, output-mu harus berupa:
5 -> 10 -> 20 -> nilMethod Append perlu menelusuri list hingga ke akhir (tempat Next bernilai nil) sebelum menambahkan node baru. Method Prepend harus membuat node baru, mengarahkan Next-nya ke head saat ini, lalu memperbarui head agar menunjuk ke node baru. Ingat, head dari list kosong bernilai nil, jadi tangani kasus itu dalam method Append-mu.
Coba sendiri
package main
import "fmt"
func main() {
// Baca nilai input
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// Buat linked list baru
list := &LinkedList{}
// TODO: Gunakan Append untuk menambahkan val1 dan val2 ke list
// TODO: Gunakan Prepend untuk menambahkan val3 ke awal list
// TODO: Cetak struktur akhir list
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP di Go
File EksternalWorkspace Go dan modulePaket dan ImporNama yang Diekspor dan Tidak DieksporPengantar OOP di Gostruct sebagai classMendefinisikan method pada structPointer receiver vs value receiverInisialisasi structFungsi KonstruktorUlasan: Kalkulator Sederhana4Interface
Pengenalan InterfaceImplementasi ImplisitInterface sebagai KontrakInterface Kosong (any)Type AssertionType SwitchKomposisi InterfaceInterface Stringer & ErrorUlasan: Kalkulator Bentuk7Enkapsulasi
Field yang Diekspor vs Tidak DieksporEnkapsulasi Tingkat PackageMethod Getter dan SetterPenyembunyian Informasi di GoRingkasan: Data Siswa10Generics (Go 1.18+)
Pengantar GenericsParameter TipeBatasan TipeStruct GenerikCara Alternatif untuk Method GenerikRingkasan Koleksi Generik2Mendalami Tipe dan Struct
Tipe Dasar dan KompositDefinisi Tipe KustomTag StructStruct AnonimStruct BersarangNilai Nol dan Nilai BawaanRangkuman: Buku Kontak5Komposisi daripada Pewarisan
Mengapa Go Tidak Memiliki PewarisanDasar Penyematan StructPromosi methodMenyematkan Beberapa StructPenyematan vs AgregasiMembayangi method yang DisematkanRangkuman: Hierarki Karyawan8Penanganan Error & OOP
Interface errorTipe Error KustomPembungkusan Error (fmt.Errorf)Error Sentinelerrors.Is() dan errors.As()Panic, Defer, dan RecoverRangkuman: Parser File3Pointer dan Memori
Dasar-Dasar Pointer di GoPointer ke StructPass by Value vs ReferenceFungsi new()Garbage Collection di GoRekap: Pembuat Linked List6Polimorfisme di Go
Polimorfisme melalui InterfaceDuck Typing di GoAturan Pemenuhan InterfaceKoleksi PolimorfikInjeksi DependensiRangkuman: Pemroses Pembayaran9Konkruensi & OOP
Dasar-dasar GoroutineChannel & KomunikasiChannel Ber-buffer vs Tanpa BufferPernyataan selectsync.Mutex & sync.RWMutexsync.WaitGroupDesain Struct yang Aman untuk ThreadRingkasan: Worker PoolLatihan sendiri: Compiler Go online