Chương 3: DANH SÁCH ĐƯỢC LIÊN KẾT – 8. Vấn đề & Giải pháp (31-40)

Tram Ho

Problem-31

Nếu head của linked list trỏ đến phần tử thứ k, thì bạn sẽ lấy các phần tử trước phần tử thứ k như thế nào?

Solution:
Sử dụng Memory Efficient Linked Lists [XOR Linked Lists].

Problem-32

Với hai linked list đã được sắp xếp, chúng ta cần hợp nhất chúng thành danh sách thứ ba theo thứ tự đã sắp xếp.

Solution:

Time Complexity – O(n).

Problem-33

Chúng ta có thể giải quyết Problem-32 mà không cần đệ quy không?

Solution:

Time Complexity – O(n).

Problem-34

Đảo ngược danh sách liên kết theo cặp.
Nếu bạn có danh sách liên kết chứa

1→2→3→4→X1 → 2 → 3 → 4 → X, thì sau khi hàm được gọi, danh sách liên kết sẽ giữ

2→1→4→3→X2 → 1 → 4 → 3 → X.

Solution:

Time Complexity – O(n).
Space Complexity – O(1).

Problem-35

Cho một cây nhị phân, hãy chuyển đổi nó thành danh sách liên kết kép.

Solution:

Mình sẽ trình bày chi tiết trong chương về Trees.

Problem-36

Làm thế nào để sắp xếp các Linked Lists?

Solution:

Mình sẽ trình bày chi tiết trong chương về Sorting.

Problem-37

Nếu chúng ta muốn nối hai danh sách liên kết, cách nào sau đây cho độ phức tạp O (1)?

  1. Singly linked lists
  2. Doubly linked lists
  3. Circular doubly linked lists

Solution:
Circular Doubly Linked Lists. Điều này là do đối với danh sách liên kết đơn và kép, chúng ta cần xem qua danh sách đầu tiên cho đến cuối và nối danh sách thứ hai. Nhưng trong trường hợp danh sách được liên kết kép vòng, chúng ta không phải duyệt qua danh sách.

Problem-38

Chia một Circular Linked List thành hai phần bằng nhau. Nếu số lượng nút trong danh sách là số lẻ thì hãy đặt danh sách đầu tiên thừa một nút so với danh sách thứ hai.

Solution:
Algorithm

  • Lưu trữ con trỏ giữa và con trỏ cuối cùng của danh sách liên kết vòng bằng cách sử dụng thuật toán tìm chu trình Floyd.
  • Làm cho nửa thứ hai của vòng.
  • Làm cho nửa thứ nhất của vòng.
  • Đặt con trỏ đầu của hai linked lists.

Ví dụ, xem Circular Linked List sau:

image.png

Sau khi chia ra nó thành như sau:

image.png

Time Complexity – O(n).
Space Complexity – O(1).

Problem-39

Làm sao để kiểm tra một Linked List xuôi ngược đều giống nhau.

Solution:
Algorithm

  • Lấy giữa danh sách liên kết.
  • Đảo ngược nửa sau của danh sách liên kết.
  • So sánh nửa đầu và nửa sau.
  • Xây dựng danh sách liên kết ban đầu bằng cách đảo ngược nửa sau một lần nữa và nối nó
    trở lại nửa đầu

Time Complexity – O(n).
Space Complexity – O(1).

Problem-40

Trao đổi các phần tử liền kề trong một danh sách liên kết.(Giống Problem 34)

Solution:

Time Complexity – O(n).
Space Complexity – O(1).

 

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo