Menu
CoddyTech

Merge Two Sorted Lists

Bạn nhận được hai danh sách liên kết đơn, mỗi danh sách được lưu trong hai mảng có cùng độ dài. Trong danh sách thứ nhất, nút i chứa giá trị values1[i] và liên kết đến nút next1[i]. Danh sách thứ hai hoạt động tương tự với next2 và values2. Trong cả hai danh sách, -1 đánh dấu điểm kết thúc và 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.

Mỗi danh sách được sắp xếp theo thứ tự không giảm dọc theo các liên kết. Hãy gộp hai danh sách thành một danh sách đã sắp xếp rồi trả về các giá trị theo thứ tự.

Hàm

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
chỉ số của nút mà mỗi nút trong danh sách đầu tiên trỏ tới, hoặc -1 nếu đó là nút cuối cùng
values1integer-array
giá trị mà mỗi nút trong danh sách đầu tiên lưu giữ
next2integer-array
chỉ số của nút mà mỗi nút trong danh sách thứ hai liên kết đến, hoặc -1 nếu đó là nút cuối cùng
values2integer-array
giá trị của từng nút trong danh sách thứ hai
Trả vềinteger-array
các giá trị trong danh sách đã gộp, theo thứ tự

Ràng buộc

  • 1 ≤ L1 ≤ 2000, trong đó L1 là độ dài của next1 và values1.
  • 1 ≤ L2 ≤ 2000, trong đó L2 là độ dài của next2 và values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Mỗi phần tử của next1 là -1 hoặc chỉ số nút của danh sách thứ nhất, và mỗi phần tử của next2 là -1 hoặc chỉ số nút của danh sách thứ hai.
  • Bắt đầu từ nút 0, mỗi danh sách đi qua từng nút đúng một lần rồi đến -1. Không có chu trình.
  • Dọc theo các liên kết, mỗi danh sách được sắp xếp theo thứ tự không giảm.

Ví dụ

Đầu vào
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Đầu ra
[1, 2, 3, 4, 6, 7, 9]
Giải thích
Theo các liên kết, danh sách thứ nhất đi qua các nút 0, 2, 1 và đọc được 1, 4, 6; danh sách thứ hai đọc được 2, 3, 7, 9. Mỗi lần lấy phần tử đầu nhỏ hơn sẽ cho kết quả 1, 2, 3, 4, 6, 7, 9.
challenge icon

Câu hỏi mở rộng

Bạn có thể gộp k danh sách đã sắp xếp trong thời gian O(N log k), với N là tổng số nút không?

Đặt lại code
def mergeTwoLists(next1, values1, next2, values2):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Đầu ra mong đợi

[1, 2, 3, 4, 6, 7, 9]