
연결 목록이란 무엇입니까?
https://namu.wiki/w/%EC%97%B0%EA%B2%B0%20%EB%A6%AC%EC%8A%A4%ED%8A%B8
연결된 목록-Wikipedia
배열과 달리 첫 번째 데이터 추가/삭제는 O(1) 시간에 완료됩니다. 배열은 데이터를 추가하거나 삭제할 때 모든 데이터가 이 지점을 지나 이동해야 하지만 연결된 목록은 그렇지 않습니다.
namu.wiki
컴퓨터 과학에서 연결 목록은 선형 순서가 메모리에 물리적으로 정렬되지 않은 데이터 항목의 선형 집합입니다. 각각은 포인터를 사용하여 다음 노드를 가리킵니다. 함께 시퀀스를 나타내는 노드 그룹으로 구성된 데이터 구조입니다. 다음은 순서가 지정되지 않은 단일 연결 목록을 구현하는 Go 프로그램의 소스 코드입니다.
go에서 구현된 연결 목록
기능의 역할
type Node struct : 노드 구조
LinkedList 구조체 유형 : 연결 리스트 구조
AddNode() : 지정된 데이터를 가진 새 노드를 목록 끝에 추가합니다.
RemoveNode() : 지정된 데이터 목록의 첫 번째 노드를 제거합니다.
PrintList() : 목록을 반복하고 각 노드의 데이터를 인쇄합니다.
package main
import "fmt"
//노드 구조체, 데이터와 노드로 이루어짐
type Node struct {
data int
next *Node
}
//링크드 리스트 구조체
//노드의 헤드가 있음
type LinkedList struct {
head *Node
}
//AddNode 메서드는 지정된 데이터가 있는 새 노드를 목록 끝에 추가합니다.
//먼저 주어진 데이터로 새 노드를 만든 다음 목록이 비어 있는지 확인합니다(즉, 헤드가 0인지 여부)
//이 경우 새 노드가 목록의 머리글로 설정됩니다.
// 그렇지 않으면 마지막 노드에 도달할 때까지 목록을 반복한 다음 마지막 노드의 다음 필드가 새 노드를 가리키도록 설정합니다.
func (list *LinkedList) AddNode(data int) {
newNode := &Node{data, nil}
if list.head == nil {
list.head = newNode
} else {
current := list.head
for current.next != nil {
current = current.next
}
current.next = newNode
}
}
//RemoveNode 메서드는 지정된 데이터가 있는 목록의 첫 번째 노드를 제거합니다.
//목록이 비어 있으면 단순히 반환됩니다.
//목록의 첫 번째 노드에 주어진 데이터가 있으면 목록의 머리가 두 번째 노드를 가리키도록 설정합니다(두 번째 노드가 없으면 0으로 설정됩니다).
//그렇지 않으면 지정된 데이터가 있는 노드를 찾을 때까지 목록을 반복한 다음 제거된 노드를 가리키도록 이전 노드의 다음 필드를 설정합니다.
func (list *LinkedList) RemoveNode(data int) {
if list.head == nil {
return
}
if list.head.data == data {
list.head = list.head.next
return
}
previous := list.head
for previous.next != nil {
if previous.next.data == data {
previous.next = previous.next.next
return
}
previous = previous.next
}
}
// 단순히 목록을 반복하고 각 노드의 데이터를 인쇄합니다.
func (list *LinkedList) PrintList() {
current := list.head
for current != nil {
fmt.Print(current.data, " ")
current = current.next
}
fmt.Println()
}
func main() {
// 이 예에서는 새 LinkedList 인스턴스를 생성하고 여기에 세 개의 노드를 추가한 다음 목록을 인쇄하고
//목록에서 두 번째 노드를 제거한 다음 목록을 다시 인쇄합니다. 입력 및 출력은 다음과 같습니다:
myList := &LinkedList{}
myList.AddNode(1)
myList.AddNode(2)
myList.AddNode(3)
myList.PrintList()
myList.RemoveNode(2)
myList.PrintList()
}
소스 코드 출력으로 이동
go run linkedList_advanced.go
1 2 3
1 3
