Gabungkan senarai tersusun

WBOY
Lepaskan: 2024-07-18 13:26:18
asal
1082 orang telah melayarinya

Merge orted lists

Hari ini, kita melihat satu lagi tugas senarai terpaut.

Buat fungsi untuk menggabungkan 2 senarai terpaut yang diisih. Senarai yang terhasil hendaklah senarai diisih menggunakan nod 2 senarai.

Untuk ini, kami akan menggunakan pelaksanaan senarai pautan generik dari siaran sebelumnya yang boleh didapati di sini

func mergeSortedLists(ll1 LinkedList[int], ll2 LinkedList[int]) LinkedList[int] {
    result := LinkedList[int]{}

    p1 := ll1.Head
    p2 := ll2.Head
    rp := &Node[int]{} // dummy node as result head
    result.Head = rp
    for p1 != nil && p2 != nil {
        if p1.Data >= p2.Data {
            rp.Next = p2
            p2 = p2.Next
        } else {
            rp.Next = p1
            p1 = p1.Next
        }
        rp = rp.Next
    }
    if p1 != nil {
        rp.Next = p1
    }
    if p2 != nil {
        rp.Next = p2
    }
    result.Head = result.Head.Next
    return result
}
Salin selepas log masuk

Logiknya agak mudah untuk diikuti. Mula-mula, kami menyediakan penunjuk ke kepala 2 senarai dan senarai yang terhasil. Memandangkan kami tidak mengetahui 'kepala' senarai yang terhasil, kami mencipta nod tiruan sebagai pemegang tempat (kami akan membetulkannya kemudian). Kami juga mencipta nod semasa, rp, untuk senarai hasil.

Seterusnya, kami mengulangi 2 senarai tersebut. Kami mempunyai nod semasa untuk setiap senarai. Pada setiap langkah, kita melihat mana antara 2 nod semasa mempunyai nilai yang lebih kecil dan meletakkan nod itu pada senarai hasil. Kemudian alihkan nod semasa senarai itu (yang lebih kecil) ke nod seterusnya dalam senarai. Kami juga perlu mengalihkan nod semasa hasil ke tempat seterusnya.

Logik gelung kami adalah untuk terus melakukan ini sehingga kami sampai ke penghujung salah satu senarai. Pada ketika ini, kita tahu bahawa tiada lagi elemen untuk dibandingkan untuk salah satu senarai; mereka sudah berada dalam senarai keputusan. Jadi, kita boleh meletakkan baki nod senarai lain pada penghujung hasil, kerana kita tahu ia sudah diisih.

Bagaimana anda akan melakukan ini berbeza? Bolehkah kita mengoptimumkan ini? Beritahu saya dalam ulasan.

Terima kasih!

Kod untuk siaran ini dan semua siaran dalam siri ini boleh didapati di sini

Atas ialah kandungan terperinci Gabungkan senarai tersusun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan