순환 연결 리스트(Circular Linked List)의 시작 부분에 새로운 노드를 삽입하려면 먼저 'Node' 클래스를 정의해야 합니다. 이 클래스에는 두 가지 속성이 있습니다. 하나는 노드에 저장되는 데이터이고, 다른 하나는 연결 리스트에서 다음 노드를 가리키는 참조입니다.
순환 연결 리스트란?
순환 연결 리스트는 일반 연결 리스트와 달리 마지막 노드가 'NULL'을 가리키지 않습니다. 대신 헤드(head)와 꼬리(tail)가 서로 인접하여 연결되어 원(circle) 형태를 이룹니다. 즉, 마지막 노드의 next 포인터가 다시 첫 번째 노드를 가리키는 구조입니다.
또한 초기화 함수를 포함하는 별도의 클래스를 만들어야 하며, 이 클래스에서는 노드의 head가 'None'으로 초기화됩니다. 그리고 사용자가 직접 정의한 여러 메서드를 통해 연결 리스트의 시작 부분에 노드를 추가하거나 노드 값을 출력할 수 있습니다.
예제 코드
class Node:
def __init__(self,data):
self.data = data
self.next = None
class list_creation:
def __init__(self):
self.head = Node(None)
self.tail = Node(None)
self.head.next = self.tail
self.tail.next = self.head
def add_at_beginning(self,my_data):
new_node = Node(my_data);
if self.head.data is None:
self.head = new_node;
self.tail = new_node;
new_node.next = self.head;
else:
temp = self.head;
new_node.next = temp;
self.head = new_node;
self.tail.next = self.head;
def print_it(self):
curr = self.head;
if self.head is None:
print("The list is empty");
return;
else:
print(curr.data),
while(curr.next != self.head):
curr = curr.next;
print(curr.data),
print("\n");
class circular_linked_list:
my_cl = list_creation()
print("Values are being added to the list")
my_cl.add_at_beginning(21);
my_cl.print_it();
my_cl.add_at_beginning(53);
my_cl.print_it();
my_cl.add_at_beginning(76);
my_cl.print_it();실행 결과
Values are being added to the list 21 53 21 76 53 21
코드 설명
- 'Node' 클래스 생성: 노드의 데이터(data)와 다음 노드를 가리키는 참조(next)를 담는 기본 클래스입니다.
- 'list_creation' 클래스 생성: 순환 연결 리스트를 관리하는 데 필요한 속성들을 가진 또 다른 클래스입니다.
- 'add_at_beginning' 메서드: 데이터를 순환 연결 리스트의 맨 앞, 즉 'head' 노드 앞에 추가하는 메서드입니다.
- 'print_it' 메서드: 순환 연결 리스트의 모든 노드 값을 화면에 출력하는 메서드입니다.
- '__init__' 메서드: 순환 연결 리스트의 첫 번째 노드와 마지막 노드를 None으로 초기화합니다.
- 객체 생성 및 메서드 호출: 'list_creation' 클래스의 객체를 생성하고, 해당 객체의 메서드를 호출하여 데이터를 추가합니다.
'add_at_beginning' 메서드가 호출되면 연결 리스트의 head를 가져와 그 앞에 새 요소를 추가하고, 새 노드의 주소를 tail 포인터와 next 포인터에 연결합니다. 최종적으로 'print_it' 메서드를 통해 결과가 콘솔에 출력됩니다.
위 실행 결과를 보면, 21 → 53 → 76 순서로 데이터를 추가했지만 각각 리스트의 맨 앞에 삽입되기 때문에 출력 순서는 76, 53, 21이 되는 것을 확인할 수 있습니다.