Menu
CoddyTech

Merge Two Sorted Lists

Kamu mendapatkan dua linked list satu arah, masing-masing disimpan dalam dua array yang panjangnya sama. Dalam list pertama, node i menyimpan nilai values1[i] dan terhubung ke node next1[i]. List kedua bekerja dengan cara yang sama menggunakan next2 dan values2. Dalam kedua list, -1 menandai akhir list dan head-nya adalah node 0. Node-node tersebut tidak disimpan sesuai urutan list, jadi ikuti tautannya.

Setiap list diurutkan dalam urutan tidak menurun sepanjang tautannya. Gabungkan keduanya menjadi satu list terurut dan kembalikan nilai-nilainya sesuai urutan.

Fungsi

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
indeks simpul yang ditautkan oleh setiap simpul dalam list pertama, atau -1 untuk simpul terakhirnya
values1integer-array
nilai yang disimpan oleh setiap node dalam list pertama
next2integer-array
indeks node yang ditautkan oleh setiap node pada list kedua, atau -1 untuk node terakhirnya
values2integer-array
nilai yang disimpan oleh setiap node dalam list kedua
Mengembalikaninteger-array
nilai dari list yang digabungkan, secara berurutan

Batasan

  • 1 ≤ L1 ≤ 2000, di mana L1 adalah panjang next1 dan values1.
  • 1 ≤ L2 ≤ 2000, dengan L2 adalah panjang next2 dan values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Setiap entri next1 adalah -1 atau indeks node dari list pertama, dan setiap entri next2 adalah -1 atau indeks node dari list kedua.
  • Dimulai dari node 0, setiap list mengunjungi semua node-nya tepat satu kali, lalu mencapai -1. Tidak ada siklus.
  • Di sepanjang tautannya, setiap list diurutkan dalam urutan tidak menurun.

Contoh

Input
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Output
[1, 2, 3, 4, 6, 7, 9]
Penjelasan
Dengan mengikuti tautan, list pertama mengunjungi node 0, 2, 1 dan membaca 1, 4, 6; list kedua membaca 2, 3, 7, 9. Dengan mengambil nilai terdepan yang lebih kecil setiap kali, hasilnya adalah 1, 2, 3, 4, 6, 7, 9.
challenge icon

Pertanyaan lanjutan

Bisakah kamu menggabungkan k list yang sudah diurutkan dalam waktu O(N log k), dengan N sebagai jumlah total simpul?

Reset kode
def mergeTwoLists(next1, values1, next2, values2):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

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