Giả sử chúng ta có một danh sách liên kết các số, chúng ta phải loại bỏ những số xuất hiện nhiều lần trong danh sách liên kết (chỉ giữ một lần xuất hiện trong đầu ra), chúng ta cũng phải duy trì thứ tự xuất hiện trong danh sách liên kết ban đầu.
Vì vậy, nếu đầu vào là [2 -> 4 -> 6 -> 1 -> 4 -> 6 -> 9], thì đầu ra sẽ là [2 -> 4 -> 6 -> 1 -> 9].
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- nếu nút không rỗng, thì
- l:=một tập hợp mới
- temp:=node
- chèn giá trị của nhiệt độ vào l
- trong khi tiếp theo của tạm thời không null, hãy thực hiện
- nếu giá trị tiếp theo của tạm thời không bằng l, thì
- chèn giá trị tiếp theo của nhiệt độ vào l
- temp:=tiếp theo của temp
- nếu không,
- next of temp:=next of next of temp
- nếu giá trị tiếp theo của tạm thời không bằng l, thì
- nút trả lại
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def print_list(head): ptr = head print('[', end = "") while ptr: print(ptr.val, end = ", ") ptr = ptr.next print(']') class Solution: def solve(self, node): if node: l = set() temp = node l.add(temp.val) while temp.next: if temp.next.val not in l: l.add(temp.next.val) temp = temp.next else: temp.next = temp.next.next return node ob = Solution() head = make_list([2, 4, 6, 1, 4, 6, 9]) print_list(ob.solve(head))
Đầu vào
[2, 4, 6, 1, 4, 6, 9]
Đầu ra
[2, 4, 6, 1, 9, ]