Go 언어 프로그래밍 가이드: 단일 연결 목록 구현에 대한 자세한 설명
Go 언어에서 단일 연결 목록은 일련의 요소를 저장하고 순차적으로 액세스하는 데 사용되는 일반적인 데이터 구조입니다. 이 기사에서는 단일 연결 목록의 구현 원리를 자세히 소개하고 구체적인 Go 언어 코드 예제를 제공합니다.
단일 연결 목록은 선형 목록 데이터 구조로, 각 요소(노드)에는 데이터 필드와 포인터 필드라는 두 부분이 포함됩니다. 데이터 필드는 요소의 값을 저장하는 데 사용되며 포인터 필드는 다음 노드를 가리킵니다. 마지막 노드의 포인터 필드는 일반적으로 비어 있어 연결 목록의 끝을 나타냅니다.
먼저 단일 연결 리스트의 노드 유형을 정의합니다.
type Node struct { data int next *Node }
그 중 data
字段存储节点的值,next
필드는 다음 노드에 대한 포인터를 저장합니다.
다음으로 단일 연결 리스트의 초기화 함수를 정의합니다.
type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} }
초기화 함수에서는 빈 연결 리스트를 만들고 헤드 노드 포인터를 빈 상태로 초기화합니다.
단일 연결 목록의 삽입 작업은 연결 목록의 선두에 노드를 삽입하는 상황과 연결 목록의 끝에 노드를 삽입하는 두 가지 상황으로 나눌 수 있습니다.
첫 번째는 연결된 목록의 선두에 노드를 삽입하는 함수입니다.
func (list *LinkedList) InsertAtBeginning(value int) { newNode := &Node{data: value} newNode.next = list.head list.head = newNode }
이 함수에서는 먼저 새 노드를 만들고 해당 값을 전달된 값으로 초기화합니다. 그런 다음 새 노드의 포인터를 연결 목록의 헤드로 가리키고 마지막으로 연결 목록의 헤드 노드를 새 노드로 업데이트합니다.
다음 단계는 연결리스트 끝에 노드를 삽입하는 함수입니다.
func (list *LinkedList) InsertAtEnd(value int) { newNode := &Node{data: value} if list.head == nil { list.head = newNode return } current := list.head for current.next != nil { current = current.next } current.next = newNode }
이 함수는 먼저 새 노드를 생성하고 연결리스트가 비어 있는지 확인합니다. 비어 있으면 새 노드가 헤드 노드로 직접 설정되고, 그렇지 않으면 마지막 노드를 찾을 때까지 연결 목록을 순회한 다음 마지막 노드 뒤에 새 노드가 삽입됩니다.
삭제 작업은 헤드 노드를 삭제하는 경우와 지정된 값을 갖는 노드를 삭제하는 경우로 구분됩니다.
첫 번째는 헤드 노드를 삭제하는 함수입니다.
func (list *LinkedList) DeleteAtBeginning() { if list.head == nil { return } list.head = list.head.next }
이 함수는 헤드 노드 포인터가 다음 노드를 직접 가리키도록 하여 헤드 노드를 삭제합니다.
다음은 지정된 값을 가진 노드를 삭제하는 함수입니다.
func (list *LinkedList) DeleteByValue(value int) { if list.head == nil { return } if list.head.data == value { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == value { prev.next = current.next return } prev = current current = current.next } }
이 함수에서는 먼저 연결된 목록이 비어 있는지 확인해야 합니다. 그런 다음 헤드 노드부터 연결리스트를 순회하면서 목표 값이 있는 노드를 찾아 삭제합니다.
마지막은 단일 연결 리스트 순회 연산입니다.
func (list *LinkedList) Print() { current := list.head for current != nil { fmt.Print(current.data, " ") current = current.next } fmt.Println() }
이 함수는 헤드 노드부터 연결 리스트 끝까지 노드의 값을 하나씩 출력합니다.
다음은 단일 연결 목록을 사용하는 방법을 보여주는 전체 샘플 코드입니다.
package main import "fmt" type Node struct { data int next *Node } type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} } func (list *LinkedList) InsertAtBeginning(value int) { newNode := &Node{data: value} newNode.next = list.head list.head = newNode } func (list *LinkedList) InsertAtEnd(value int) { newNode := &Node{data: value} if list.head == nil { list.head = newNode return } current := list.head for current.next != nil { current = current.next } current.next = newNode } func (list *LinkedList) DeleteAtBeginning() { if list.head == nil { return } list.head = list.head.next } func (list *LinkedList) DeleteByValue(value int) { if list.head == nil { return } if list.head.data == value { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == value { prev.next = current.next return } prev = current current = current.next } } func (list *LinkedList) Print() { current := list.head for current != nil { fmt.Print(current.data, " ") current = current.next } fmt.Println() } func main() { list := NewLinkedList() list.InsertAtEnd(1) list.InsertAtEnd(2) list.InsertAtEnd(3) list.Print() list.DeleteByValue(2) list.Print() list.DeleteAtBeginning() list.Print() }
위는 Go 언어를 사용하여 단일 연결 목록을 구현하는 방법에 대한 자세한 가이드입니다. 이 글의 소개와 샘플 코드를 통해 독자들이 단일 연결 목록의 원리와 구현을 더 깊이 이해할 수 있기를 바랍니다.
위 내용은 Go 언어 프로그래밍 가이드: 단일 연결 목록 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!