Khi cần xóa các phần tử trùng lặp khỏi danh sách liên kết vòng, cần tạo lớp 'Node'. Lớp này có hai thuộc tính: dữ liệu chứa trong node và tham chiếu đến node tiếp theo của danh sách liên kết.
Trong danh sách liên kết vòng, head (đầu) và tail (cuối) liền kề nhau. Chúng được kết nối thành một vòng tròn và không có giá trị 'NULL' ở node cuối.
Cần tạo thêm một lớp có hàm khởi tạo, với head của node được khởi tạo là 'None'.
Nhiều phương thức do người dùng định nghĩa để thêm node vào danh sách, xóa trùng lặp và in giá trị các node.
Dưới đây là minh họa:
Ví dụ
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_data(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:
self.tail.next = new_node
self.tail = new_node
self.tail.next = self.head
def remove_duplicate_vals(self):
curr = self.head
if self.head is None:
print("Danh sách rỗng")
else:
while True:
temp = curr
index_val = curr.next
while index_val != self.head:
if curr.data == index_val.data:
temp.next = index_val.next
else:
temp = index_val
index_val = index_val.next
curr = curr.next
if curr.next == self.head:
break
def print_it(self):
curr = self.head
if self.head is None:
print("Danh sách rỗng")
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("Đang thêm node vào danh sách")
my_cl.add_data(21)
my_cl.add_data(54)
my_cl.add_data(78)
my_cl.add_data(99)
my_cl.add_data(21)
print("Danh sách là:")
my_cl.print_it()
my_cl.remove_duplicate_vals()
print("Danh sách sau cập nhật:")
my_cl.print_it()
Đầu ra
Đang thêm node vào danh sách Danh sách là: 21 54 78 99 21 Danh sách sau cập nhật: 21 54 78 99
Giải thích
- Tạo lớp 'Node'.
- Tạo lớp khác với các thuộc tính cần thiết.
- Định nghĩa phương thức 'remove_duplicate_vals' để xóa các phần tử trùng lặp trong danh sách liên kết.
- Định nghĩa phương thức 'print_it' để hiển thị các node của danh sách liên kết vòng.
- Tạo đối tượng của lớp 'list_creation' và gọi các phương thức để thêm dữ liệu.
- Phương thức 'init' khởi tạo node đầu và cuối của danh sách liên kết vòng là None.
- Gọi phương thức 'remove_duplicate_vals'.
- Phương thức duyệt qua danh sách, kiểm tra xem có phần tử nào lặp lại không.
- Nếu có, xóa phần tử đó.
- Hiển thị kết quả trên console bằng phương thức 'print_it'.