연결 리스트(Linked List)에서 특정 요소가 몇 번 나타나는지 확인해야 하는 경우가 있습니다. 이를 위해 요소를 추가하는 메서드, 리스트를 출력하는 메서드, 그리고 각 요소의 발생 횟수를 계산하는 메서드를 정의하여 해결할 수 있습니다.
아래는 전체 구현 예제입니다.
예제 코드
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList_structure:
def __init__(self):
self.head = None
self.last_node = None
def add_vals(self, data):
if self.last_node is None:
self.head = Node(data)
self.last_node = self.head
else:
self.last_node.next = Node(data)
self.last_node = self.last_node.next
def print_it(self):
curr = self.head
while curr:
print(curr.data)
curr = curr.next
def count_elem(self, key):
curr = self.head
count_val = 0
while curr:
if curr.data == key:
count_val = count_val + 1
curr = curr.next
return count_val
my_instance = LinkedList_structure()
my_list = [56, 78, 98, 12, 34, 55, 0]
for elem in my_list:
my_instance.add_vals(elem)
print('연결 리스트의 내용 : ')
my_instance.print_it()
key_val = int(input('찾을 데이터 입력: '))
count_val = my_instance.count_elem(key_val)
print('{0}은(는) 리스트에서 {1}번 나타납니다.'.format(key_val, count_val))
실행 결과
연결 리스트의 내용 :
56
78
98
12
34
55
0
찾을 데이터 입력 0
0은(는) 리스트에서 1번 나타납니다.
코드 설명
먼저 노드를 표현하는 'Node' 클래스를 생성합니다. 각 노드는 데이터(data)와 다음 노드를 가리키는 포인터(next)로 구성됩니다.
필요한 속성을 가진 'LinkedList_structure' 클래스를 정의합니다.
이 클래스에는 '__init__' 함수가 있으며, 리스트의 첫 번째 요소인 'head'와 마지막 노드인 'last_node'를 'None'으로 초기화합니다.
'add_vals' 메서드는 연결 리스트 끝에 새로운 값을 추가하는 역할을 합니다.
'print_it' 메서드는 연결 리스트의 모든 값을 콘솔에 순서대로 출력합니다.
'count_elem' 메서드는 매개변수로 받은 key 값과 일치하는 요소의 개수를 세어 반환합니다.
'LinkedList_structure' 클래스의 인스턴스를 생성한 후, 요소들이 담긴 리스트를 정의합니다.
리스트를 반복(iteration)하면서 각 요소를 연결 리스트에 순차적으로 추가합니다.
추가된 요소들을 콘솔에 출력하여 확인합니다.
사용자로부터 찾고자 하는 데이터를 입력받은 뒤, 'count_elem' 메서드를 호출하여 발생 횟수를 계산합니다.
최종 결과가 콘솔에 출력됩니다.
시간 복잡도
이 알고리즘은 연결 리스트를 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 여기서 n은 리스트의 노드 개수입니다. 공간 복잡도는 추가 변수만 사용하므로 O(1)입니다.