Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari kita bincangkan tentang cara golang menggunakan rekursi untuk membalikkan senarai terpaut

Mari kita bincangkan tentang cara golang menggunakan rekursi untuk membalikkan senarai terpaut

PHPz
PHPzasal
2023-03-29 15:42:111240semak imbas

Dalam golang, membalikkan senarai terpaut boleh dilaksanakan menggunakan rekursi. Dalam fungsi rekursif, pertama kita perlu menghantar nod seterusnya nod semasa ke dalam fungsi rekursif sebagai parameter, dan kemudian biarkan nod semasa menghala ke nod di sebelah nod seterusnya. Akhirnya, nilai pulangan fungsi rekursif dikembalikan, iaitu nod kepala baharu.

Berikut ialah kod golang yang menggunakan rekursi untuk membalikkan senarai terpaut:

type ListNode struct {
    Val int
    Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return newHead
}

Kami mula-mula menentukan sama ada nod kepala atau nod seterusnya nod kepala adalah sifar, kemudian secara langsung kepala balik. Jika tidak, kami memanggil fungsi rekursif, melepasi nod kepala seterusnya. Seterusnya, kita biarkan nod kepala seterusnya menghala ke kepala, dan kemudian menetapkan nod kepala seterusnya kepada nil. Akhirnya, nod kepala baru newHead dikembalikan.

Kami boleh menggunakan kod ujian berikut untuk mengesahkan sama ada fungsi kami betul:

// 测试代码
func main() {
    node1 := ListNode{Val: 1}
    node2 := ListNode{Val: 2}
    node3 := ListNode{Val: 3}
    node4 := ListNode{Val: 4}
    node5 := ListNode{Val: 5}
    
    node1.Next = &node2
    node2.Next = &node3
    node3.Next = &node4
    node4.Next = &node5
    
    fmt.Println("原链表:")
    printList(&node1)
    newHead := reverseList(&node1)
    fmt.Println("反转后的链表:")
    printList(newHead)
}
func printList(head *ListNode) {
    for p := head; p != nil; p = p.Next {
        fmt.Printf("%d ",p.Val)
    }
    fmt.Println()
}

Keputusan yang dijalankan adalah seperti berikut:

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1

Seperti yang dapat dilihat daripada hasil yang dijalankan, fungsi senarai terpaut terbalik kami reverseList telah berjaya membalikkan senarai terpaut asal.

Ringkasan:

Artikel ini memperkenalkan cara melaksanakan kod golang bagi membalikkan senarai terpaut melalui fungsi rekursif. Kod untuk membalikkan senarai terpaut melalui fungsi rekursif adalah ringkas, mudah difahami dan mudah difahami. Dalam projek sebenar, kita boleh memilih kaedah yang berbeza untuk melaksanakan senarai pautan terbalik mengikut keperluan.

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara golang menggunakan rekursi untuk membalikkan senarai terpaut. 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