Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk membalikkan senarai pautan dalam golang

Bagaimana untuk membalikkan senarai pautan dalam golang

PHPz
PHPzasal
2023-04-23 10:23:25945semak imbas

Pembalikan senarai terpaut ialah masalah algoritma biasa, yang memerlukan pembalikan tertib senarai terpaut. Bagi bahasa Golang, pelaksanaan penyongsangan senarai terpaut boleh dilaksanakan menggunakan ciri bahasa asas seperti penunjuk dan struktur Golang.

Di bawah ini kami akan memperkenalkan pelaksanaan Golang penyongsangan senarai terpaut secara terperinci.

Pertama, mari kita lihat struktur asas senarai terpaut. Senarai terpaut terdiri daripada nod, dan setiap nod mempunyai penunjuk ke nod seterusnya, iaitu, penuding seterusnya. Nod kepala senarai terpaut mewakili kedudukan permulaan keseluruhan senarai terpaut, dan penunjuk seterusnya nod kepala menghala ke nod pertama. Seperti yang ditunjukkan di bawah:

type ListNode struct {
    Val  int
    Next *ListNode
}

Antaranya, Val mewakili nilai nod, dan Seterusnya mewakili penunjuk ke nod seterusnya. Dua isu perlu diberi perhatian apabila melaksanakan senarai terpaut:

  1. Penunjuk nod kepala senarai terpaut perlu direkodkan
  2. Penunjuk nod semasa dan nod seterusnya perlu direkodkan

Selepas melengkapkan definisi senarai terpaut, anda boleh menulis pelaksanaan Golang pembalikan senarai terpaut. Kaedah pelaksanaan khusus adalah seperti berikut:

func reverseList(head *ListNode) *ListNode {
    //边界条件
    if head == nil || head.Next == nil {
        return head
    }
    //定义当前节点和下一个节点指针
    cur, next := head, head.Next
    //头节点指针置为空
    head.Next = nil
    for next != nil {
        //暂存下一个节点的指针
        tmp := next.Next
        //反转节点
        next.Next = cur
        //移动当前节点和下一个节点指针
        cur, next = next, tmp
    }
    return cur
}

Pertama, nilaikan syarat sempadan Jika senarai terpaut kosong atau hanya mempunyai satu nod, terus kembali ke senarai terpaut asal. Kemudian tentukan penunjuk nod semasa dan penuding nod seterusnya. Memandangkan pembalikan senarai terpaut memerlukan nod semasa untuk menghala ke nod sebelumnya, nod sebelumnya bagi nod pertama perlu ditetapkan kepada nil. Kemudian terbalikkan senarai terpaut melalui gelung Operasi pembalikan khusus ialah:

  1. Simpan sementara penunjuk nod seterusnya
  2. Terbalikkan penuding nod semasa untuk menghala ke nod sebelumnya<.>
  3. Alihkan penuding nod semasa dan penuding nod seterusnya
Akhir sekali, kembalikan penuding nod kepala terbalik senarai terpaut.

Dalam proses membalikkan senarai terpaut menggunakan kod di atas, kita perlu memanggil fungsi ini dan memasukkan parameter penunjuk kepala senarai terpaut. Contohnya:

func main() {
    var head ListNode
    head.Next = &ListNode{Val: 1}
    head.Next.Next = &ListNode{Val: 2}
    head.Next.Next.Next = &ListNode{Val: 3}
    head.Next.Next.Next.Next = &ListNode{Val: 4}
    //链表反转
    head.Next = reverseList(head.Next)
    for head.Next != nil {
        fmt.Println(head.Next.Val)
        head.Next = head.Next.Next 
    }
}
Dalam kod contoh ini, kami mula-mula membina senarai terpaut dengan 5 nod. Kemudian panggil fungsi terbalik untuk membalikkannya. Akhirnya, dengan merentasi nod, nod senarai terbalik terpaut dikeluarkan mengikut urutan.

Melalui contoh kod di atas, kita dapat melihat bahawa pelaksanaan Golang bagi penyongsangan senarai terpaut adalah agak mudah dan biasa. Dengan menguasai operasi asas senarai terpaut dan penggunaan penunjuk, kami boleh melaksanakan operasi pembalikan senarai terpaut dengan mudah.

Atas ialah kandungan terperinci Bagaimana untuk membalikkan senarai pautan dalam 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