Senarai terbalik golang

王林
Lepaskan: 2023-05-22 19:13:05
asal
844 orang telah melayarinya

Menterbalikkan senarai terpaut ialah masalah algoritma struktur data klasik, yang memerlukan nod pengendalian pada senarai terpaut, membalikkan senarai terpaut dan mengembalikan nod kepala terbalik.

Menggunakan bahasa golang untuk melaksanakan senarai terpaut terbalik boleh menunjukkan ciri operasi berorientasikan objek dan penuding golang. Mari kita terangkan secara terperinci cara melaksanakan senarai terpaut terbalik.

1. Tentukan struktur nod senarai terpaut

Pertama, kita perlu mentakrifkan struktur nod senarai terpaut, yang mengandungi dua pembolehubah ahli: nilai dan penunjuk ke nod seterusnya.

type ListNode struct {
    Val int
    Next *ListNode
}
Salin selepas log masuk

2. Balikkan senarai terpaut

Seterusnya, kita perlu menulis fungsi untuk membalikkan senarai terpaut. Fungsi ini akan melintasi senarai terpaut dan membalikkan penunjuk seterusnya setiap nod ke nod sebelumnya, dan akhirnya mengembalikan nod kepala terbalik.

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    for head != nil {
        temp := head.Next
        head.Next = prev
        prev = head
        head = temp
    }
    return prev
}
Salin selepas log masuk

Fungsi ini mengandungi penunjuk prev, yang digunakan untuk mengekalkan nod sebelumnya semasa proses traversal.

Pertama, kami memulakan penuding sebelumnya kepada null, menunjukkan bahawa ia terletak sebelum nod pertama senarai terpaut.

Kemudian kami mula merentasi senarai terpaut.

Dalam setiap gelung, kami menggunakan suhu penuding tambahan untuk menyimpan sementara nod seterusnya nod semasa.

Seterusnya, kami membalikkan penuding seterusnya bagi nod semasa kepada penuding sebelumnya, dan memasukkan nod semasa ke dalam kedudukan yang ditunjukkan oleh penuding sebelumnya.

Akhir sekali, kami menghalakan nod semasa ke temp supaya kami boleh melintasinya dalam gelung seterusnya.

3. Uji senarai terpaut terbalik

Melalui kod di atas, kami telah menyelesaikan pelaksanaan senarai terpaut terbalik. Seterusnya, kami boleh menulis beberapa kod ujian untuk mengesahkan sama ada fungsi senarai pautan terbalik kami adalah betul.

func main() {
    head := &ListNode{Val: 1}
    head.Next = &ListNode{Val: 2}
    head.Next.Next = &ListNode{Val: 3}
    head.Next.Next.Next = &ListNode{Val: 4}
    head.Next.Next.Next.Next = &ListNode{Val: 5}
    fmt.Println("Original List: ")
    printList(head)
    reversedList := reverseList(head)
    fmt.Println("Reversed List: ")
    printList(reversedList)
}

func printList(head *ListNode) {
    for head != nil {
        fmt.Printf("%d ", head.Val)
        head = head.Next
    }
    fmt.Println()
}
Salin selepas log masuk

Dalam fungsi ujian ini, kami mula-mula membuat senarai terpaut dengan 5 nod dan mencetak tertib awal senarai terpaut Kemudian kami memanggil fungsi reverseList() untuk membalikkan senarai terpaut dan mengeluarkan terbalik senarai pautan terakhir. Pada akhirnya, kami mentakrifkan fungsi printList() untuk mencetak senarai terpaut.

Menjalankan fungsi ujian di atas, kita boleh mendapatkan keputusan berikut:

Original List: 
1 2 3 4 5 
Reversed List: 
5 4 3 2 1 
Salin selepas log masuk

Seperti yang dapat dilihat daripada keputusan, kami berjaya membalikkan senarai terpaut.

Ringkasan

Menterbalikkan senarai terpaut ialah masalah algoritma yang sangat menarik dan biasa dan sering digunakan dalam aplikasi praktikal.

Melalui artikel ini, kami mempelajari cara melaksanakan senarai terpaut terbalik pada golang dan menggunakan ciri operasi berorientasikan objek dan penunjuk golang.

Dengan melaksanakan sendiri algoritma ini, kami dapat memahami dengan lebih baik struktur data senarai terpaut, dan pada masa yang sama memperdalam lagi penguasaan kami dalam bahasa golang.

Atas ialah kandungan terperinci Senarai terbalik golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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