이중 연결 리스트(doubly linked list)의 노드 개수를 세려면 먼저 'Node' 클래스를 정의해야 합니다. 이 클래스에는 세 가지 속성이 포함됩니다. 노드에 저장된 데이터(data), 다음 노드에 대한 참조(next), 그리고 이전 노드에 대한 참조(prev)입니다.
이중 연결 리스트의 각 노드는 포인터(참조)를 가집니다. 현재 노드는 다음 노드와 이전 노드를 모두 가리키며, 리스트의 마지막 노드의 next 포인터는 None 값을 갖습니다. 이러한 구조 덕분에 이중 연결 리스트는 양방향으로 자유롭게 순회할 수 있다는 큰 장점이 있습니다.
아래는 이를 구현한 전체 예제입니다.
예제
class Node:
def __init__(self, my_data):
self.prev = None
self.data = my_data
self.next = None
class count_val:
def __init__(self):
self.head = None
self.tail = None
def add_data(self, my_data):
new_node = Node(my_data)
if(self.head == None):
self.head = self.tail = new_node
self.head.prev = None
self.tail.next = None
else:
self.tail.next = new_node
new_node.prev = self.tail
self.tail = new_node
self.tail.next = None
def count_node(self):
my_counter = 0
curr = self.head
while(curr != None):
my_counter = my_counter + 1
curr = curr.next
return my_counter
def print_it(self):
curr = self.head
if (self.head == None):
print("리스트가 비어 있습니다")
return
print("노드 목록 :")
while curr != None:
print(curr.data)
curr = curr.next
my_instance = count_val()
print("리스트에 요소를 추가하는 중입니다")
my_instance.add_data(10)
my_instance.add_data(14)
my_instance.add_data(24)
my_instance.add_data(17)
my_instance.add_data(22)
my_instance.print_it()
print("이중 연결 리스트의 노드 개수는 다음과 같습니다 : ")
print(my_instance.count_node())출력
리스트에 요소를 추가하는 중입니다 노드 목록 : 10 14 24 17 22 이중 연결 리스트의 노드 개수는 다음과 같습니다 : 5
코드 설명
- 'Node' 클래스가 생성됩니다. 이 클래스는 prev, data, next 세 가지 속성을 초기화하며, 새로운 노드의 기본 구조를 담당합니다.
- 필요한 속성을 가진 'count_val' 클래스가 별도로 생성됩니다.
- 'add_data' 메서드가 정의되어, 이중 연결 리스트의 끝에 새로운 데이터를 추가합니다. 리스트가 비어 있으면 head와 tail이 모두 새 노드를 가리키고, 그렇지 않으면 기존 tail 뒤에 노드를 연결합니다.
- 'count_node' 메서드가 정의되어, head부터 시작해 next 포인터를 따라가며 노드 개수를 하나씩 증가시켜 최종 개수를 반환합니다.
- 'print_it' 메서드가 정의되어, 리스트가 비어 있는지 확인한 후 모든 노드의 데이터를 순서대로 출력합니다.
- '__init__' 메서드에서 head와 tail 노드가
None으로 초기화되어 빈 리스트 상태로 시작합니다. - 'count_val' 클래스의 객체가 생성되고, 5개의 데이터(10, 14, 24, 17, 22)가 차례대로 추가된 후 각 메서드가 호출됩니다.
- 'count_node' 메서드가 실행되면 리스트를 처음부터 끝까지 순회하면서 노드의 총 개수인 5를 계산합니다.
- 마지막으로 노드 목록과 노드 개수가 콘솔에 출력됩니다.