Rumah >pembangunan bahagian belakang >Golang >Balikkan senarai terpaut semasa pergi

Balikkan senarai terpaut semasa pergi

WBOY
WBOYasal
2024-07-18 08:33:291115semak imbas

Reverse a linked list in go

Ini ialah soalan kegemaran untuk diberikan kepada pembangun baharu. Agak mudah jika anda mempunyai kelas struktur data yang baik.

Terbalikkan satu senarai terpaut. (Ini ialah Leetcode 206)

Untuk pelaksanaan, saya telah memilih untuk menjadikan senarai terpaut sebagai jenis generik.

type Node[T any] struct {
    Data T
    Next *Node[T]
}

type LinkedList[T any] struct {
    Head *Node[T]
}

func (ll *LinkedList[T]) Append(data T) {
    newNode := &Node[T]{Data: data, Next: nil}

    if ll.Head == nil {
        ll.Head = newNode
        return
    }

    current := ll.Head
    for current.Next != nil {
        current = current.Next
    }
    current.Next = newNode
}

Dan untuk fungsi terbalik, ia dilakukan dengan satu laluan dengan menyedari bahawa semua yang perlu kita lakukan ialah mengekalkan penunjuk ke nod sebelumnya, kemudian menetapkan 'sebelah' nod yang diberikan kepada sebelumnya.

Apabila kita sampai ke penghujung, barulah kita tahu nod semasa ialah 'kepala' baharu senarai.

func (ll *LinkedList[T]) ReverseLinkedList() {
    var prev *Node[T] = nil
    var ptr *Node[T] = ll.Head
    for ptr != nil {
        var next *Node[T] = ptr.Next
        ptr.Next = prev
        prev = ptr
        if next == nil {
            ll.Head = ptr
        }
        ptr = next
    }
}

Adakah kita terlepas syarat sempadan? Apakah komplikasi yang ditambah jika senarai itu kini menjadi senarai berganda? Beritahu saya dalam ulasan.

Terima kasih!

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

Atas ialah kandungan terperinci Balikkan senarai terpaut semasa pergi. 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