Balikkan senarai terpaut semasa pergi

WBOY
Lepaskan: 2024-07-18 08:33:29
asal
1077 orang telah melayarinya

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
}
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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!

sumber:dev.to
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!