ホームページ  >  記事  >  バックエンド開発  >  1 行の逆方向リンクリスト

1 行の逆方向リンクリスト

WBOY
WBOY転載
2024-02-09 09:18:19981ブラウズ

1 行の逆方向リンクリスト

php Xiaobian Yuzai は、一般的なデータ構造アルゴリズムである「行内逆リンク リスト」を紹介します。このアルゴリズムでは、リンク リスト内のノードの順序を逆にする必要があります。簡潔で効率的なコード実装により、リンク リストの順序を完全に逆転させて、この操作を 1 行で完了できます。このアルゴリズムは実際のプログラミングに非常に役立ち、データ処理とアルゴリズム設計の両方で重要な役割を果たします。この素晴らしいアルゴリズムについて一緒に学びましょう!

質問内容

go on leetcodeで1行を使った逆リンクリストの解決策を見つけました。機能しますが、実装方法がわかりません。

###それでおしまい:### リーリー

たとえば、リストを

[1->2->3->4->5->nil]

とします。 これが次のように機能することはわかっています:

    最初に実行します
  1. head.next = prev

    (head.next = nil、つまり今head = [1->nil])

  2. 次に、
  3. prev = head

    (このステップでは、前のステップの head と同様に、prev = [1->nil] になります)。

  4. head = head.next

    これは魔法です。 go の 2 番目のステップの prev には head = [1->nil] を使用しますが、このステップの後は head = [2->3-> ; 4->5->nil]

  5. したがって、
head != nil

の場合、反復され、2 番目のステップでは prev = [2->1->nil], head = [3- >4->5->nil] など。 この行は次のように表現できます:

リーリー

そうですか?なぜこうなった?

解決策

式の左側の変数は、その時点で式の右側の値に代入されます。これは言語の賢い使い方です。

わかりやすくするために、例を見てみましょう。

###設定###

これは私たちのリンクリストです: 1 -> 2 -> 3 -> 4 -> なし

関数が実行される前に、

先頭は *ノード 1

prev はゼロ (初期化されていません)
  • head.next は *ノード 2
  • です
  • ステップバイステップ
  • リーリー
  • 細かく見てみましょう、

prev (nil) = ヘッド (*ノード 1)

head (*ノード 1) = head.next (*ノード 2)
  • head.next (*ノード 2) = prev (nil)
  • 次の反復、
prev (*ノード 1) = ヘッド (*ノード 2)

head (*ノード 2) = head.next (*ノード 3)
  • head.next (*ノード 3) = prev (*ノード 1)
  • ###まとめ###
  • 基本的には、
  • head.next
  • を前のノードに戻し、prev と head を次のノードに移動します。

明確にするために、これを Go の教科書的なアルゴリズムと比較してください:

リーリー

以上が1 行の逆方向リンクリストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。