Mungkin saya terlalu menyederhanakan ini, tetapi hanya mengulang daftar terkecil dan menggunakan node terakhir Link
sebagai titik penggabungan?
Jadi, di mana Data->Link->Link == NULL
titik akhirnya, memberi Data->Link
sebagai titik penggabungan (di akhir daftar).
EDIT:
Oke, dari gambar yang kamu posting tadi kamu parse dua list, yang terkecil dulu. Dengan daftar terkecil Anda dapat mempertahankan referensi ke node berikut. Sekarang, ketika Anda mengurai daftar kedua Anda melakukan perbandingan pada referensi untuk menemukan di mana Referensi [i] adalah referensi di LinkedList [i] -> Link. Ini akan memberikan titik penggabungan. Saatnya menjelaskan dengan gambar (tumpang tindih nilai pada gambar OP).
Anda memiliki daftar tertaut (referensi ditunjukkan di bawah):
A->B->C->D->E
Anda memiliki daftar tertaut kedua:
1->2->
Dengan daftar yang digabungkan, referensi akan menjadi sebagai berikut:
1->2->D->E->
Oleh karena itu, Anda memetakan daftar "kecil" pertama (sebagai daftar gabungan, yang kami hitung memiliki panjang 4 dan daftar utama 5)
Ulangi daftar pertama, pertahankan referensi referensi.
Daftar tersebut akan berisi referensi berikut Pointers { 1, 2, D, E }
.
Kami sekarang melalui daftar kedua:
-> A - Contains reference in Pointers? No, move on
-> B - Contains reference in Pointers? No, move on
-> C - Contains reference in Pointers? No, move on
-> D - Contains reference in Pointers? Yes, merge point found, break.
Tentu, Anda mempertahankan daftar petunjuk baru, tapi itu tidak di luar spesifikasi. Namun daftar pertama diurai tepat satu kali, dan daftar kedua hanya akan diurai sepenuhnya jika tidak ada titik penggabungan. Jika tidak, ini akan berakhir lebih cepat (di titik penggabungan).