Menu
CoddyTech

Middle of the 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ề giá trị của nút ở giữa. Khi danh sách có số nút chẵn, sẽ có hai nút ở giữa; hãy trả về giá trị của nút thứ hai.

Hàm

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
giá trị mà mỗi nút lưu giữ
nextinteger-array
chỉ số của nút mà mỗi nút liên kết tới, hoặc -1 nếu là nút cuối cùng
Trả vềinteger
giá trị của nút ở giữa, tức nút ở giữa thứ hai khi độ dài là số chẵn

Ràng buộc

  • 1 ≤ n ≤ 5000, trong đó n là độ dài của values và next.
  • -104 ≤ values[i] ≤ 104
  • Mỗi next[i] là -1 hoặc chỉ số nút từ 0 đến n-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
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Đầu ra
5
Giải thích
Lần theo các liên kết từ nút 0, ta sẽ đi qua các nút 0, 3, 4, 2, 1, có giá trị lần lượt là 4, 7, 5, 2, 9. Nút ở giữa là nút 4, có giá trị 5, chứ không phải phần tử ở giữa của mảng values[2] = 2.
challenge icon

Câu hỏi mở rộng

Bạn có thể trả về nút nằm ở vị trí một phần ba danh sách chỉ trong một lượt duyệt không? Mỗi con trỏ sẽ di chuyển nhanh đến mức nào và bạn sẽ dừng ở đâu?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

values = [4, 9, 2, 7, 5]
next = [3, -1, 1, 4, 2]

Đầu ra mong đợi

5