Menu
Coddy logo textTech

요약 - 연결 리스트 빌더

Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 24번째.

challenge icon

챌린지

쉬움

연결 리스트(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 -> nil

Append 메서드는 새 노드를 추가하기 전에 리스트의 끝(Nextnil인 곳)까지 순회해야 합니다. 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: 최종 리스트 구조 출력하기
}

객체 지향 프로그래밍의 모든 레슨