>  기사  >  백엔드 개발  >  golang에서 연결리스트를 역방향으로 바꾸는 방법

golang에서 연결리스트를 역방향으로 바꾸는 방법

PHPz
PHPz원래의
2023-04-23 10:23:25878검색

연결된 목록 반전은 연결 목록의 순서를 바꿔야 하는 일반적인 알고리즘 문제입니다. Golang 언어의 경우 Golang 포인터 및 구조와 같은 기본 언어 기능을 사용하여 연결 목록 반전 구현을 구현할 수 있습니다.

아래에서는 Linked List Inversion의 Golang 구현을 자세히 소개합니다.

먼저 연결리스트의 기본 구조를 살펴보겠습니다. 연결리스트는 노드들로 구성되며, 각 노드는 다음 노드를 가리키는 포인터, 즉 다음 포인터를 갖는다. 연결리스트의 헤드 노드는 전체 연결리스트의 시작 위치를 나타내며, 헤드 노드의 다음 포인터는 첫 번째 노드를 가리킨다. 아래와 같이

type ListNode struct {
    Val  int
    Next *ListNode
}

여기서 Val은 노드의 값을 나타내고 Next는 다음 노드에 대한 포인터를 나타냅니다. 연결 리스트를 구현할 때 주의해야 할 두 가지 문제가 있습니다.

  1. 연결 리스트의 헤드 노드의 포인터를 기록해야 합니다.
  2. 현재 노드의 포인터와 다음 노드

연결된 목록의 정의를 완료한 후 연결 목록 반전의 Golang 구현을 작성할 수 있습니다. 구체적인 구현 방법은 다음과 같습니다.

func reverseList(head *ListNode) *ListNode {
    //边界条件
    if head == nil || head.Next == nil {
        return head
    }
    //定义当前节点和下一个节点指针
    cur, next := head, head.Next
    //头节点指针置为空
    head.Next = nil
    for next != nil {
        //暂存下一个节点的指针
        tmp := next.Next
        //反转节点
        next.Next = cur
        //移动当前节点和下一个节点指针
        cur, next = next, tmp
    }
    return cur
}

먼저 경계 조건을 판단합니다. 연결 목록이 비어 있거나 노드가 하나만 있으면 원래 연결 목록으로 직접 돌아갑니다. 그런 다음 현재 노드 포인터와 다음 노드 포인터를 정의합니다. 연결된 목록 역전에서는 현재 노드가 이전 노드를 가리켜야 하므로 첫 번째 노드의 이전 노드는 nil로 설정되어야 합니다. 그런 다음 루프를 통해 연결된 목록을 반전시킵니다. 구체적인 반전 작업은 다음과 같습니다.

  1. 다음 노드의 포인터를 임시로 저장합니다.
  2. 이전 노드를 가리키도록 현재 노드 포인터를 반전합니다.
  3. 현재 노드 포인터와 다음 노드를 이동합니다. 포인터

마지막으로 역방향 리스트 헤드 노드 포인터를 반환합니다.

위 코드를 사용하여 연결된 목록을 뒤집는 과정에서 이 함수를 호출하고 연결된 목록 헤드 포인터 매개 변수를 전달해야 합니다. 예:

func main() {
    var head ListNode
    head.Next = &ListNode{Val: 1}
    head.Next.Next = &ListNode{Val: 2}
    head.Next.Next.Next = &ListNode{Val: 3}
    head.Next.Next.Next.Next = &ListNode{Val: 4}
    //链表反转
    head.Next = reverseList(head.Next)
    for head.Next != nil {
        fmt.Println(head.Next.Val)
        head.Next = head.Next.Next 
    }
}

이 예제 코드에서는 먼저 5개의 노드로 연결된 목록을 구성합니다. 그런 다음 reverse 함수를 호출하여 반전시킵니다. 마지막으로 노드들을 순회함으로써 역방향 연결리스트 노드들이 순서대로 출력된다.

위의 코드 예제를 통해 연결 목록 반전의 Golang 구현이 비교적 간단하고 일반적이라는 것을 알 수 있습니다. 연결리스트의 기본 연산과 포인터의 사용법을 익히면 연결리스트의 역방향 연산을 쉽게 구현할 수 있습니다.

위 내용은 golang에서 연결리스트를 역방향으로 바꾸는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.