본문 바로가기
IT/algorithm

[Python] 알고리즘 개념6 퀴즈 - 연결 리스트(Linked List)

by Echinacea 2025. 2. 20.
반응형

 

 

✅ 퀴즈 1

연결 리스트(Linked List)의 주요 특징으로 옳지 않은 것은?

  1. 동적 메모리 할당이 가능하다.
  2. 중간 삽입 및 삭제가 배열보다 효율적이다.
  3. 노드는 서로 독립적으로 존재하며 연결될 필요가 없다.
  4. 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성된다.

 

 

✅ 퀴즈 2

다음 코드가 출력하는 결과는 무엇인가?

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node

    def print_list(self):
        temp = self.head
        while temp:
            print(temp.data, end=' → ')
            temp = temp.next
        print("None")

llist = LinkedList()
llist.append(1)
llist.append(2)
llist.append(3)
llist.print_list()
  1. 1 → 2 → 3 → None
  2. 3 → 2 → 1 → None
  3. None → 1 → 2 → 3
  4. 1 → None → 2 → None → 3 → None

 

 

✅ 퀴즈 3

연결 리스트에서 노드를 삭제할 때, 올바른 과정이 아닌 것은?

  1. 삭제할 노드의 이전 노드를 찾아야 한다.
  2. 삭제할 노드가 가리키고 있는 다음 노드를 이전 노드가 가리키도록 변경해야 한다.
  3. 삭제할 노드의 데이터를 None으로 바꾸면 자동으로 삭제된다.
  4. 마지막 노드를 삭제할 경우, 이전 노드의 next 포인터를 None으로 설정해야 한다.

 

 

✅ 퀴즈 4

이중 연결 리스트(Doubly Linked List)와 단일 연결 리스트(Singly Linked List)의 차이점으로 올바른 것은?

  1. 단일 연결 리스트는 각 노드가 이전 노드와 다음 노드를 가리키지만, 이중 연결 리스트는 다음 노드만 가리킨다.
  2. 이중 연결 리스트는 각 노드가 prev와 next 포인터를 가지며, 양방향 탐색이 가능하다.
  3. 단일 연결 리스트는 삽입과 삭제가 더 효율적이다.
  4. 이중 연결 리스트는 마지막 노드가 첫 번째 노드를 가리켜 순환 구조를 가진다.

 

 

✅ 퀴즈 5

연결 리스트에서 중간에 노드를 삽입할 때, 올바른 과정은?

  1. 새로운 노드를 만들고, 기존 노드의 next 포인터를 새로운 노드로 변경한다.
  2. 새로운 노드를 만들고, 기존 노드가 가리키던 노드를 새로운 노드의 next 포인터로 연결한 뒤, 기존 노드의 next를 새로운 노드로 설정한다.
  3. 새로운 노드를 만들고, 기존 노드의 데이터를 새로운 데이터로 변경한다.
  4. 새로운 노드를 만들고, 아무 위치에 추가하면 자동으로 리스트가 정렬된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

🔍 정답 및 해설

 

✅ 퀴즈 1 정답: 3번 (노드는 서로 연결되어야 한다.)

💡 해설:

  • 연결 리스트는 각 노드가 서로 연결되어야 하며, 독립적으로 존재하는 것이 아닙니다.
  • 각 노드는 데이터다음 노드를 가리키는 포인터(next) 로 구성됩니다.

 

✅ 퀴즈 2 정답: 1번 (1 → 2 → 3 → None)

💡 해설:

  • append() 함수는 연결 리스트의 끝에 데이터를 추가하는 역할을 합니다.
  • print_list() 함수는 연결 리스트의 모든 데이터를 출력하는 함수입니다.
  • 따라서 1 → 2 → 3 → None이 출력됩니다.

 

✅ 퀴즈 3 정답: 3번 (노드 데이터를 None으로 바꾼다고 삭제되지 않음)

💡 해설:

  • 연결 리스트에서 노드를 삭제하려면, 이전 노드가 삭제할 노드의 다음 노드를 가리키도록 변경해야 합니다.
  • 단순히 데이터를 None으로 변경하는 것은 삭제와 무관합니다.

 

✅ 퀴즈 4 정답: 2번 (이중 연결 리스트는 prev와 next 포인터를 가짐)

💡 해설:

  • **이중 연결 리스트(Doubly Linked List)**는 각 노드가 이전 노드(prev)와 다음 노드(next) 포인터를 모두 포함합니다.
  • 따라서 양방향 탐색이 가능하며, 특정 노드 삭제 시 더 효율적입니다.

 

✅ 퀴즈 5 정답: 2번 (기존 노드의 next를 새로운 노드로 연결한 뒤, 새로운 노드가 원래 연결된 노드를 가리켜야 함)

💡 해설:

  • 중간 삽입 시 새로운 노드는 기존 노드의 next를 가리켜야 하며, 기존 노드의 next 포인터를 새로운 노드로 변경해야 합니다.
  • 즉, 새로운 노드를 중간에 넣는다면 기존 노드의 next를 새로운 노드로 업데이트하고, 새로운 노드의 next가 기존의 다음 노드를 가리켜야 합니다.

➡ 연결 리스트는 배열보다 삽입/삭제 연산이 효율적인 자료구조이므로, 다양한 문제에 적용할 수 있습니다. 코드 구현 연습을 통해 개념을 확실히 익혀보세요! 🚀


 

반응형

댓글