>  기사  >  백엔드 개발  >  Golang 배열을 연결리스트로

Golang 배열을 연결리스트로

PHPz
PHPz원래의
2023-05-14 16:18:37587검색

Golang은 데이터 구조가 유연하고 다양하며 조작하기 쉬운 효율적인 프로그래밍 언어입니다. Golang에서는 배열과 연결리스트가 일반적으로 사용되는 데이터 구조입니다. 배열은 선형 구조인 반면 연결리스트는 비선형 구조입니다. 어떤 경우에는 데이터를 더 쉽게 처리하기 위해 배열을 연결 목록으로 변환해야 합니다. 이 글에서는 Golang에서 배열을 연결리스트로 변환하는 방법을 소개합니다.

1. 배열과 연결 목록의 차이점

배열과 연결 목록은 모두 데이터 집합을 저장하는 방법이지만 큰 차이가 있습니다. 다음은 차이점에 대한 간략한 소개입니다.

  1. 배열은 첨자를 통해 요소에 무작위로 액세스할 수 있는 연속적이고 고정된 크기의 데이터 구조입니다. 연결된 목록은 요소가 포인터를 통해 함께 연결되는 비연속적이고 동적으로 크기가 조정되는 데이터 구조입니다.
  2. 배열은 연속적인 메모리 공간을 차지하며 첨자를 통해 요소에 액세스하는 것은 매우 빠르지만 연결 목록은 포인터를 통해 요소를 연결하고 첫 번째 요소를 제외하고는 요소에 무작위로 액세스할 수 없으므로 액세스 속도가 느립니다.
  3. 배열의 삽입 및 삭제 작업은 더 어렵고 다른 요소를 이동해야 하며 시간 복잡도는 O(n)입니다. 연결 목록은 포인터를 통해 요소를 연결하고 삽입 및 삭제 작업이 더 편리하고 시간 복잡도가 높습니다. O(1)이다.

2. 배열을 연결 목록으로 변환

Golang에서 배열을 연결 목록으로 변환하려면 다음 단계를 사용할 수 있습니다.

  1. 연결 목록 노드 유형을 정의합니다.

// 연결 목록 노드 유형 정의
type ListNode struct {

Val int
Next *ListNode

}

여기서는 노드의 값과 다음 노드에 대한 포인터를 포함하는 연결 목록 노드 유형을 정의합니다.

  1. 연결된 목록을 만듭니다.

//배열을 연결 리스트로 변환
func arrayToList(nums []int) *ListNode {

var head *ListNode
// 遍历数组
for i := len(nums) - 1; i >= 0; i-- {
    // 创建链表节点
    node := &ListNode{nums[i], nil}
    node.Next = head // 将新节点链接到链表头
    head = node      // 将新节点设置为链表头
}
return head

}

이 코드는 배열을 연결 리스트로 변환합니다. 먼저 연결된 목록 헤드 노드 헤드를 정의하고 이를 nil로 초기화합니다. 그런 다음 배열을 반복하여 각 노드를 차례로 생성하고 이를 연결 목록의 헤드에 연결합니다. 마지막으로 연결리스트의 헤드 노드를 반환합니다.

  1. 코드를 테스트하세요.

func main() {

nums := []int{1, 2, 3, 4, 5}
head := arrayToList(nums)

for head != nil {
    fmt.Print(head.Val, " ")
    head = head.Next
}

}

위 코드를 사용하여 배열을 연결 목록으로 변환한 결과를 테스트할 수 있습니다. 여기서는 배열 [1,2,3,4,5]를 정의하고 이를 연결리스트로 변환합니다. 그런 다음 연결된 목록을 순회하여 각 노드의 값을 출력합니다.

3. 요약

Golang에서는 배열을 연결리스트로 변환하면 데이터를 더 편리하게 처리할 수 있습니다. 위의 방법에서는 연결리스트 노드 유형을 정의하고 배열을 순회하며 각 노드를 연결리스트의 헤드에 연결하여 배열을 연결리스트로 변환합니다. 위의 단계를 통해 배열을 연결리스트로 쉽게 변환할 수 있고 삽입, 삭제 작업 등 연결리스트가 주는 편리함을 누릴 수 있습니다.

위 내용은 Golang 배열을 연결리스트로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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