go에서 연결리스트 뒤집기

WBOY
풀어 주다: 2024-07-18 08:33:29
원래의
1105명이 탐색했습니다.

Reverse a linked list in go

신입 개발자들이 가장 좋아하는 질문입니다. 괜찮은 데이터 구조 수업을 들었다면 꽤 간단합니다.

단일 연결 목록을 뒤집습니다. (리트코드 206입니다)

구현을 위해 연결리스트를 일반형으로 선택했습니다.

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
}
로그인 후 복사

역방향 기능의 경우 이전 노드에 대한 포인터를 유지한 다음 지정된 노드의 '다음'을 이전 노드로 설정하기만 하면 된다는 점을 인식하여 단일 패스로 완료됩니다.

끝에 도달하면 현재 노드가 목록의 새로운 '헤드'라는 것을 알 수 있습니다.

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
    }
}
로그인 후 복사

경계 조건을 놓쳤나요? 목록이 이제 이중 연결 목록이면 어떤 문제가 추가되나요? 댓글로 알려주세요.

감사합니다!

이 게시물과 이 시리즈의 모든 게시물에 대한 코드는 여기에서 확인할 수 있습니다

위 내용은 go에서 연결리스트 뒤집기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿