Menu
CoddyTech

Palindrome Linked List

Bạn có một danh sách liên kết đơn được lưu trong hai mảng có cùng độ dài. Nút i chứa giá trị values[i] và liên kết đến nút next[i], -1 đánh dấu điểm kết thúc danh sách, còn nút đầu là nút 0. Các nút không được lưu theo thứ tự trong danh sách, vì vậy hãy lần theo các liên kết.

Trả về true nếu các giá trị đọc từ nút đầu đến cuối giống với các giá trị đọc ngược từ cuối về đầu, nếu không thì trả về false.

Hàm

isPalindrome(next: integer-array, values: integer-array) → boolean
nextinteger-array
chỉ số của nút mà mỗi nút liên kết đến, hoặc -1 nếu là nút cuối cùng
valuesinteger-array
giá trị mà mỗi nút lưu giữ
Trả vềboolean
true nếu danh sách đọc giống nhau theo cả hai chiều

Ràng buộc

  • 1 ≤ L ≤ 5000, trong đó L là độ dài của next và values.
  • -100 ≤ values[i] ≤ 100
  • Mỗi next[i] là -1 hoặc chỉ số của một nút từ 0 đến L-1.
  • Bắt đầu từ nút 0, danh sách đi qua mỗi nút đúng một lần rồi đến -1. Không có chu trình.

Ví dụ

Đầu vào
next = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
Đầu ra
true
Giải thích
Các liên kết lần lượt đi qua các nút 0, 4, 1, 3, 2, nên danh sách là 3, 1, 4, 1, 3. Hai số 3 khớp nhau, hai số 1 khớp nhau, còn số 4 ở giữa không có phần tử nào để đối chiếu.
challenge icon

Câu hỏi mở rộng

Bạn có thể thực hiện việc này trong thời gian O(L) với bộ nhớ bổ sung O(1) không?

Đặt lại code
def isPalindrome(next, values):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

next = [4, 3, -1, 2, 1]
values = [3, 4, 3, 1, 1]

Đầu ra mong đợi

true