全体的なアイデアは、最初に前方のポインターを n ステップ移動させ、次に前方のポインターが最後に到達するまで前方と後方のポインターを一緒に移動させることです。
最初にアドバンス ポインターを設定します。アドバンス ポインターにはちょっとしたトリックがあり、質問 2 で説明されています。
アドバンス ポインタ pre 次のノードは先頭を指します。フロント ポインタを 1 番目、バック ポインタを 2 番目にします。両方とも pre
first に等しいです。最初に n ステップ先に進みます
その後、1 番目と 2 番目が一緒に進みます。このとき、両者の間の距離は n です。1 番目が終点に到達したとき、2 番目の位置はちょうど n- の 1 つ前のノードになります。最後から 番目のノード。
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre = new ListNode(0); pre.next = head; ListNode first = pre; ListNode second = pre; while (n>0){ first= first.next; n--; } while (first.next != null){ first=first.next; second=second.next; } second.next = second.next.next; return pre.next; } }
以上がJavaで最後のリンクリストからN番目のノードを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。