Dua daftar tertaut terbalik, yaitu, penunjuk ekor tabel rantai tertaut lainnya dibalik dari merger dari penunjuk ekor dari satu daftar tertaut ke daftar tertaut lainnya. Di bawah ini, ide dan kode implementasi dari pergantian pembalikan dari dua daftar yang ditautkan diperkenalkan secara rinci.
1. Deskripsi Masalah
Tautan a dan b
A: 1-> 2-> 3-> 4
B: A-> B-> C-> D
Harap membalikkan dua daftar tertaut secara bergantian.
4-> D-> 3-> C-> 2-> B-> 1-> a
Definisi tipe simpul adalah sebagai berikut:
classnode {node publik selanjutnya;} 2. Kode Sumber:
Dua daftar A dan B tertaut disahkan kembali ke daftar yang ditautkan setelah diproses:
Node reverse_merge (node a, node b) {// a, b semua hanya memiliki satu node if (a.Next == null) {a.next = b; .Next; B.Next = NULL; ; Tiga, analisis:
Program ini dibagi menjadi tiga bagian -sebelum siklus sementara, siklus sementara, dan siklus sementara.
1) Memproses Daftar Tertaut A dan B sebelumnya
2) Sementara siklus -Bagian pemrosesan inti dari proses pemrosesan dapat diulangi di sini.
Namun, simpul di mana a berada di A. yang diproses secara khusus hanya untuk node di mana A berada, diperlukan operasi nol berikutnya, yang berarti bahwa atom pertama dalam 1 harus diimplementasikan di luar siklus.
Jika Anda menggunakan metode 2, Anda hanya perlu meletakkan 1 jari ke dalam siklus. Oleh karena itu, struktur atom yang dijelaskan dalam 2 digunakan di sini.
Informasi yang Diperlukan oleh Struktur Atom
Ketika kita pergi ke siklus tertentu, dengan asumsi pengoperasian lingkaran biru, pada saat ini, keadaan daftar tertaut kita adalah:
Metode gambar yang lebih intuitif adalah:
Ini melibatkan 3 node -2,3 dan C. Bagian merah adalah metode tautan yang ingin kami lakukan. Untuk menautkan C-> 2,3-> C, kita harus tahu bahwa ada petunjuk yang sesuai untuk merekam posisi mereka. Oleh karena itu, sebelum siklus, kita perlu menguasai alamat ketiga elemen ini, dan setelah diproses, dengan cara yang sama, struktur atom yang perlu diproses dengan cara yang sama.
Misalnya, metode berikut mencatat alamat tiga node yang dirancang dalam siklus ini:
A, NA, dan B mewakili pointer atau referensi ke node yang sesuai.
Setelah pemrosesan selesai, Anda perlu merekam node yang terlibat dalam struktur atom berikutnya dengan cara yang sama, sehingga untuk memastikan bahwa siklus dapat dieksekusi sesuai dengan logika terpadu.
Operasi penugasan ini adalah apa yang dilakukan oleh kode medium dari badan siklus. Selain itu, NEXTB didefinisikan sebagai variabel menengah dalam kode untuk merekam alamat node D sebelumnya sebelum c-> D terputus, karena C ke 2 akan kehilangan kontak D. Variabel menengah ini diperlukan.
3) Sebelum seluruh loop -Selesaikan masalah yang dibawa oleh operasi persiapan
Kami belum menangani simpul A, karena terlalu istimewa, dan tidak ada struktur atom yang cocok yang dapat memasukkannya. Jadi kami meletakkannya di luar siklus dan bersiap untuk sirkulasi.
Setelah itu, kita dapat menempatkan 1, 2, dan B dalam siklus. Di sini, hanya ada satu simpul A dan B, yang juga perlu diproses secara terpisah.
4) Setelah seluruh loop -pemrosesan akhir
Ketika kami menemukan bahwa daftar B Linked mencapai akhir, siklus sudah berakhir. Tetapi pada saat ini, ada node penanganan. Siklus kami akan berhenti dalam struktur atom ini:
Sebagai operasi terakhir, kita perlu memproses langkah-langkah tautan secara manual d-> 3,4-> D-Ini juga tidak mungkin, karena perawatan struktur atom harus ditemukan.
Ini bukan cara yang lengkap, dan ada banyak hal yang belum diproses. Selain itu, struktur data simpul tidak sepenuhnya ditentukan, tetapi ini bukan fokus artikel ini.
Melalui analisis terperinci di atas, saya berharap dapat membantu semua orang memahami metode dan implementasi dari dua dorongan dorongan merger alternatif.