Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình Python xóa phần tử trùng lặp khỏi Danh sách liên kết vòng

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'.