Menu
CoddyTech

Remove Nth Node From End of List

Bạn được cung cấp 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.

Hãy xóa nút thứ n tính từ cuối danh sách, trong đó nút cuối cùng là nút thứ 1 tính từ cuối. Trả về các giá trị của những nút còn lại theo thứ tự trong danh sách.

Hàm

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
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 đến, hoặc -1 nếu đó là nút cuối cùng
ninteger
nút cần xóa, tính từ cuối danh sách, trong đó 1 là nút cuối cùng
Trả vềinteger-array
các giá trị còn lại theo thứ tự trong danh sách, rỗng khi nút duy nhất bị xóa

Ràng buộc

  • 1 ≤ L ≤ 5000, trong đó L là độ dài của values và next.
  • -100 ≤ values[i] ≤ 100
  • 1 ≤ n ≤ L
  • Mỗi next[i] là -1 hoặc chỉ số 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
values = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
Đầu ra
[5, 2, 6, 7]
Giải thích
Lần theo các liên kết từ nút 0, ta đọc được danh sách 5, 2, 6, 9, 7. Phần tử thứ 2 tính từ cuối là 9, ở nút 1; xóa phần tử này thì còn lại 5, 2, 6, 7.
challenge icon

Câu hỏi mở rộng

Bạn có thể tìm và bỏ liên kết nút đó chỉ trong một lượt mà không cần đếm độ dài trước không?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

[5, 2, 6, 7]