ホームページ  >  記事  >  バックエンド開発  >  リンクされたリストの末尾から N 番目を削除します

リンクされたリストの末尾から N 番目を削除します

WBOY
WBOYオリジナル
2024-07-17 01:15:30413ブラウズ

Remove Nth from end of linked list

この投稿では、別のリンク リスト アルゴリズムを検討します。これは少し難しいです。

リンクリストの末尾から n 番目のノードを削除する関数を作成します。

これは leetcode の問題から来ています。 leetcode の問題と同様、「n」は 1 から始まり、1 からリストの長さまで変化します。

func (ll *LinkedList[T]) RemoveNthFromEnd(n int) *Node[T] {
    if n == 0 {
        return nil
    }
    fast := ll.Head // this moves to the end
    slow := ll.Head // this should be one behind the nth from end

    for count := 0; count < n; count++ {
        if fast == nil { // list is too short
            return nil
        }
        fast = fast.Next
    }
    if fast == nil { // special case, removing head
        res := ll.Head
        ll.Head = ll.Head.Next
        return res
    }
    for fast != nil && fast.Next != nil {
        slow = slow.Next
        fast = fast.Next
    }
    res := slow.Next
    slow.Next = slow.Next.Next
    return res
}

これの鍵はデュアル ポインターを使用することです。まず、リストの先頭への高速ポインタと低速ポインタを初期化します。

次に、高速ポインタを n ノード前方に移動します。このようにして、低速ポインタは高速ポインタよりも「n」後ろになります。これで、高速が終了するまで、両方のポインタをロックステップで移動できます。

その後、n 番目から最後までのノードを削除して、それを返すことができます。

もっと良い方法はありますか?コメント欄でお知らせください。

ありがとうございます!

この投稿とこのシリーズのすべての投稿のコードはここにあります

以上がリンクされたリストの末尾から N 番目を削除しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。