요약 - 연결 리스트 빌더
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 24번째.
챌린지
쉬움연결 리스트(linked list)를 처음부터 직접 만들어 봅시다! 각 노드가 다음 노드를 가리켜 메모리 내에서 연결된 값들의 체인을 형성하는 데이터 구조를 만들게 됩니다.
코드는 두 개의 파일로 구성됩니다:
linkedlist.go:Value(int)와Next(*Node) 필드를 가진Node구조체를 정의합니다.Head노드에 대한 포인터를 가지는LinkedList구조체를 만듭니다.*LinkedList에 다음 메서드들을 구현하세요:Append- 주어진 값을 가진 새 노드를 리스트의 끝에 추가합니다.Prepend- 주어진 값을 가진 새 노드를 리스트의 시작 부분에 추가합니다.Print- 리스트를 순회하며 모든 값을->로 구분하여 출력하고, 마지막에nil을 붙입니다.
main.go: 입력으로부터 값을 읽고, 노드를 추가(append) 및 삽입(prepend)하여 연결 리스트를 구축한 후, 최종 리스트 구조를 출력합니다.
다음과 같은 입력이 제공됩니다:
- Line 1: 추가(append)할 첫 번째 값
- Line 2: 추가(append)할 두 번째 값
- Line 3: 삽입(prepend)할 값
Print 메서드는 다음과 같은 형식으로 리스트를 출력해야 합니다:
[value1] -> [value2] -> [value3] -> nil예를 들어, 10, 20, 5가 주어지면 출력은 다음과 같아야 합니다:
5 -> 10 -> 20 -> nilAppend 메서드는 새 노드를 추가하기 전에 리스트의 끝(Next가 nil인 곳)까지 순회해야 합니다. Prepend 메서드는 새 노드를 생성하고, 해당 노드의 Next가 현재 head를 가리키도록 한 다음, head를 새 노드로 업데이트해야 합니다. 빈 리스트는 head가 nil이라는 점을 기억하여 Append 메서드에서 해당 케이스를 처리하세요.
직접 해보기
package main
import "fmt"
func main() {
// 입력 값 읽기
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// 새로운 연결 리스트 생성
list := &LinkedList{}
// TODO: Append를 사용하여 val1과 val2를 리스트에 추가하기
// TODO: Prepend를 사용하여 val3를 리스트의 시작 부분에 추가하기
// TODO: 최종 리스트 구조 출력하기
}
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서