"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > go에서 연결리스트 뒤집기

go에서 연결리스트 뒤집기

2024-07-31에 게시됨
검색:216

Reverse a linked list in go

이 질문은 새로운 개발자에게 가장 인기 있는 질문입니다. 괜찮은 데이터 구조 수업이 있다면 매우 간단합니다.

단일 연결 리스트를 뒤집습니다. (Leetcode 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
    }
}

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

감사해요!

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

릴리스 선언문 이 글은 https://dev.to/johnscode/reverse-a-linked-list-in-go-583i?1 에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3