Khi cần chuyển đổi một danh sách liên kết đơn (singly linked list) thành danh sách liên kết vòng (circular linked list), một phương thức tên convert_to_circular_list được định nghĩa để đảm bảo phần tử cuối cùng trỏ về phần tử đầu tiên, làm cho nó trở thành vòng.
Ví dụ
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList_struct:
def __init__(self):
self.head = None
self.last_node = None
def add_elements(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 convert_to_circular_list(my_list):
if my_list.last_node:
my_list.last_node.next = my_list.head
def last_node_points(my_list):
last = my_list.last_node
if last is None:
print('Danh sách rỗng...')
return
if last.next is None:
print('Nút cuối trỏ đến None...')
else:
print('Nút cuối trỏ đến phần tử có giá trị {}...'.format(last.next.data))
my_instance = LinkedList_struct()
my_input = input('Nhập các phần tử của danh sách liên kết: ').split()
for data in my_input:
my_instance.add_elements(int(data))
last_node_points(my_instance)
print('Đang chuyển đổi danh sách liên kết thành danh sách liên kết vòng...')
convert_to_circular_list(my_instance)
last_node_points(my_instance)
Kết quả
Nhập các phần tử của danh sách liên kết: 56 32 11 45 90 87 Nút cuối trỏ đến None... Đang chuyển đổi danh sách liên kết thành danh sách liên kết vòng... Nút cuối trỏ đến phần tử có giá trị 56...
Giải thích
Lớp
Nodeđược tạo.Lớp
LinkedList_structvới các thuộc tính cần thiết được tạo.Phương thức
__init__khởi tạo nút đầu (head) và nút cuối (last_node) làNone.Phương thức
add_elementsthêm phần tử vào danh sách liên kết.Phương thức
convert_to_circular_listtrỏ nút cuối về nút đầu, tạo thành vòng.Phương thức
last_node_pointskiểm tra xem danh sách rỗng, nút cuối trỏNonehay trỏ đến nút cụ thể.Một đối tượng của lớp
LinkedList_structđược tạo.Nhập các phần tử của danh sách liên kết từ người dùng.
Các phần tử được thêm vào danh sách.
Gọi phương thức
last_node_pointstrên danh sách này.Hiển thị kết quả ra bảng điều khiển.