Rumah  >  Artikel  >  pembangunan bahagian belakang  >  pembalikan senarai pautan golang

pembalikan senarai pautan golang

PHPz
PHPzasal
2023-04-06 09:12:22139semak imbas

Bahasa Go (Golang) ialah bahasa pengaturcaraan yang dibangunkan oleh Google Penumpuannya pada kesederhanaan, kebolehbacaan, kecekapan dan keselamatan menjadikannya digemari oleh semakin ramai pengaturcara. Di Golang, senarai terpaut ialah salah satu struktur data yang biasa digunakan. Dalam kerja pembangunan sebenar, kami mungkin perlu melakukan operasi pada senarai terpaut, seperti membalikkan senarai terpaut. Artikel berikut akan memperkenalkan cara melaksanakan pembalikan senarai terpaut di Golang.

Senarai terpaut ialah struktur data asas yang terdiri daripada nod dan penunjuk Setiap nod dalam senarai terpaut mengandungi item data dan penunjuk ke nod seterusnya. Disebabkan kewujudan penunjuk, operasi pada senarai terpaut, seperti tertib terbalik, boleh dilaksanakan hanya dengan mengubah suai penunjuk penunjuk tanpa menggerakkan elemen.

Pertama, kita perlu mentakrifkan struktur nod senarai terpaut:

<code class="go">type ListNode struct {
    Val  int
    Next *ListNode
}</code>

Dalam struktur di atas, Val mewakili nilai nod semasa, dan Seterusnya menunjuk ke nod seterusnya. Seterusnya, kita boleh melaksanakan operasi pembalikan senarai terpaut dengan mentakrifkan fungsi:

<code class="go">func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    curr := head

    for curr != nil {
        next := curr.Next
        curr.Next = prev
        prev = curr
        curr = next
    }

    return prev
}</code>

Dalam fungsi di atas, kami mentakrifkan dua pembolehubah penuding sebelum dan curr, dan kemudian membalikkan senarai terpaut. Dalam pelaksanaan khusus, kami melintasi senarai terpaut, dan untuk setiap nod, kami menghalakan curr penuding ke nod, dan menghalakan penuding prev ke nod curr sebelumnya. Kemudian, kami menghalakan Seterusnya daripada kursor penuding ke penuding sebelumnya untuk melaksanakan operasi tertib terbalik. Selepas traversal selesai, kami mengembalikan penunjuk sebelumnya sebagai ketua baharu senarai terpaut untuk melengkapkan susunan terbalik senarai terpaut.

Seterusnya, kita boleh menulis fungsi utama untuk menguji fungsi penyongsangan senarai terpaut:

<code class="go">func main() {
    head := &ListNode{Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3, Next: nil}}}
    fmt.Println("Original Linked List:")
    printList(head)
    fmt.Println("Reversed Linked List:")
    reversedHead := reverseList(head)
    printList(reversedHead)
}

func printList(head *ListNode) {
    for head != nil {
        fmt.Printf("%d->", head.Val)
        head = head.Next
    }
    fmt.Println("NULL")
}</code>

Dalam kod di atas, kami mentakrifkan senarai terpaut yang mengandungi tiga nod, dan kemudian panggil Print senarai terpaut dan fungsi senarai terpaut terbalik. Akhir sekali, kita boleh menyemak sama ada senarai terpaut diterbalikkan dengan betul dengan menjalankan program. Outputnya adalah seperti berikut:

<code>Original Linked List:
1->2->3->NULL
Reversed Linked List:
3->2->1->NULL</code>

Ini menunjukkan bahawa di Golang, kami telah berjaya melaksanakan operasi pembalikan senarai terpaut.

Ringkasnya, artikel ini memperkenalkan cara melaksanakan operasi pembalikan senarai terpaut di Golang. Dengan mentakrifkan struktur nod dan melaksanakan fungsi tertib terbalik, kami boleh melengkapkan tertib terbalik senarai terpaut dengan mudah. Dalam pembangunan sebenar, senarai terpaut selalunya boleh digunakan untuk beberapa masalah yang rumit, jadi adalah sangat penting untuk mahir dalam operasi senarai terpaut. Jika anda mempunyai lebih minat dalam medan bahasa Go, anda boleh mengetahui lebih lanjut tentang Golang dan membangunkan aplikasi yang lebih cekap dan boleh diselenggara.

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

Kenyataan:
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