[質問レコードをブラッシュする]29。リンクリストの下からk番目のノード

オファーが届きました。友達を掘って受け取りましょう!私は2022年の春の採用チェックインイベントに参加しています。クリックしてイベントの詳細を表示します。

1.トピックの説明:

トピックのソース:LeetCode>リンクリストのk番目の最後のノード

リンクリストを入力し、リンクリストの下からk番目のノードを出力します。ほとんどの人の習慣に合わせるために、この質問は1から数え始めます。つまり、リンクリストのテールノードは最後から2番目のノードです。

たとえば、リンクリストにはヘッドノードから始まる6つのノードがあり、それらの値は1、2、3、4、5、6の順になっています。このリンクリストの最後から3番目のノードは、値が4のノードです。

 

例:

リンクリストが与えられた場合:1-> 2-> 3-> 4-> 5、およびk=2。

リンクリストに戻る4->5。

2.思考分析:

アイデア1:

  1. 一般的な考え方:順次検索アルゴリズム
  2. 現在のリンクリストの長さがnであると仮定します
  3. リンクリストの最後から2番目のk番目のノードは正の数n-k番目のノードです
  4. リンクリストのn-k番目のノードに順次移動するのは、最後のk番目のノードです。

アイデア2:

  1. 一般的な考え方:ダブルポインター方式(高速ポインターと低速ポインター)
  2. リンクリストのk+1番目のノードへの最初のポインタをポイントします
  3. 2番目のポインターは、リンクリストの最初のノードを指します
  4. この時点で、2つのポインター間の距離は正確にkノードです。
  5. 2つのポインターは同期して逆方向に移動します。最初のポインターがリンクリストの最後にある空のノードに到達すると、2番目のポインターはリンクリストの下からk番目のノードを指します。
  6. 最初にリンクリストのヘッドノードへの最初のポインタをポイントし、次にkステップ戻ります。次に、最初のポインタはリンクリストのk+1番目のノードをポイントします。
  7. 最初に2番目のポインターをリンクリストのヘッドノードにポイントし、2番目のポインターと最初のポインターと同期して逆方向に移動します。最初のポインターがリンクリストの最後にある空のノードを指している場合は、ポイントしたポイントを返します。このとき2番目のポインタでto。ノードを使用できます。

3. ACコード:

アイデア1:

    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            int n = 0;
            ListNode resultNode = null;
            for (resultNode = head; resultNode != null; resultNode = resultNode.next) {
                n++;
            }
            for (resultNode = head; n > k; n--) {
                resultNode = resultNode.next;
            }
            return resultNode;
        }
    }
复制代码

アイデア2:


    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            ListNode firstPointer = head;
            ListNode secondPointer = head;
            while (firstPointer != null && k > 0) {
                firstPointer = firstPointer.next;
                k--;
            }
            while (firstPointer != null) {
                firstPointer = firstPointer.next;
                secondPointer = secondPointer.next;
            }
            return secondPointer;
        }
    }
复制代码

おすすめ

転載: juejin.im/post/7078974302724292645