Menu
CoddyTech

Palindrome Linked List

同じ長さの2つの配列に格納された単方向連結リストが与えられます。ノード i は値 values[i] を保持し、ノード next[i] へのリンクを持ちます。-1 はリストの終端を示し、先頭ノードは 0 です。ノードはリストの順序どおりには格納されていないため、リンクをたどってください。

先頭から末尾まで読み取った値の並びが、末尾から先頭に向かって読み取った並びと同じ場合は true を、そうでない場合は false を返してください。

関数

isPalindrome(next: integer-array, values: integer-array) → boolean
nextinteger-array
各ノードがリンクしているノードのインデックス。最後のノードの場合は -1
valuesinteger-array
各ノードが保持する値
戻り値boolean
リストをどちらの方向から読んでも同じ場合は true

制約

  • 1 ≤ L ≤ 5000、ここで L は next と values の長さです。
  • -100 ≤ values[i] ≤ 100
  • 各next[i]は-1または0からL-1までのノードインデックスです。
  • ノード 0 から始まり、リストは各ノードをちょうど1回ずつ訪れ、その後 -1 に到達します。サイクルはありません。

例

入力
next = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
出力
true
説明
リンクはノード 0, 4, 1, 3, 2 を訪れるため、リストは 3, 1, 4, 1, 3 となります。2つの3は一致し、2つの1も一致します。中央の 4 には照合する相手がありません。
challenge icon

発展問題

追加メモリ O(1) で、O(L) 時間で実行できますか?

コードをリセット
def isPalindrome(next, values):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

true